Александр Дегтярев: на генераторах эмитируют поведение async function которые скорее всего войдут в стандарт летом/осенью этого года, но уже доступны с babel
генераторы могут временно прерывать свое выполнение, возвращая промежуточные результаты с помощью оператора yield, а так же принимать через него дополнительные данные
async function работает подобным образом, но более узко: внутри можно использовать оператор await передав ему промис, async function при этом дождется пока промис зарезолвится (при этом await вернет результат) или зарежектится (внутрь будет брошено исключение). Так же важно знать, что async function всегда возвращает промис, даже если внутри не производилось никаких асинхронных действий. Пример:
//данная функция вернет промис, который зарезолвится со значением 'test' через 1 секунду
function test() {
return new Promise(resolve => {
setTimeout(resolve, 1000, 'test');
});
}
async function test2() {
var t = await test(); //ждем завершения test не блокируя поток, результат сохраняем в t
t = t.split('').join('.'); //этот код выполнится только после того как await вернет свое значение и сохранит его в t
return t; //хоть и возвращаем строку, но функция вернет промис
}
//тестим
test2().then(result => {
console.log(result); // 't.e.s.t'
});
Замечу что данный код можно запустить только прогнав через babel с пресетом stage-3
Александр Дегтярев: классический подход к асинхронности - это колбэк-функции, но с ними есть 2 проблемы, которые решают промисы:
1) callback-hell - когда нам нужно выполнить несколько асинхронных действий последовательно, одно по завершении другого, получается лесенка из вложенных функций, исходник не очень удобно читать, так как из-за отступов код постоянно уходит вправо. Промисы решают эту проблему с помощью цепочек промисов promise.then( ... ).then( ... ).then( ... )
2) когда нам нужно дождаться результата нескольких асинхронных действий и только потом работать с результатом, для этого есть Promise.all - который оборачивает массив промисов в один единственный промис, который резолвится когда зарезолвились все исходные промисы и режектится если зарежектился любой из них
Валентин: Ваши чанки - это клиентский js код, он должен отдаваться статикой, без всякой мудреной логики: запросили - получили.
Ограничивать доступ нужно к апи, то есть лезед незадачливый юзер в Вашу админку, получил ее код, код запрашивает у бэкенда данные, на что бекэнд отвечает "а не пойти ли тебе на... страницу логина", так как юзер не админ
Doxi: делаете со страницы (из контент-скрипта) запрос в фоновый скрипт, фоновый скрипт делает запрос к нужному сайту, получает ответ и отправляет его странице.
Подобная архитектура например реализована в фреймворке kango при ajax запросе из контент-скрипта
WorldDelete .: Вы позволили себе перейти на ты, перейду и я, раз так комфортнее, если дашь ссылку на гитхаб/битбакет проекта, могу глянуть в свободное время. Если не хочешь святить их здесь, в личке есть мой скайп
maolo: еще такой момент замечу, я лично не использую фишки ниже stage-3, так как то что в стандарте идет как stage-0 - stage-2 вероятно может измениться
Насчет es2015 - от транспайлеров уже сейчас можно отказаться во многих окружениях (node.js, electron.js, расширения для браузеров chrome и firefox), на сайтах лучше все-таки транспайлить, иначе потеряем пользователей на ie и safari
vladymyr_olegovich: как минимум без fs файл с диска Вы не считаете
все подключенные модули в моем примере входят в сам node.js (их не нужно устанавливать)
Dark Hole: то есть Вы хотите что-то вроде: site.ru/?alert('Hello world!')
правильно понимаю?
на чужой сайт никак, а на своем лучше так не делать, ибо Вы сами откроете уязвимость для XSS атак
miki131: конечно же лучше пул соединений в одном процессе, если производительности не будет хватать, тогда можно сделать кластер процессов по количеству ядер процессора
генераторы могут временно прерывать свое выполнение, возвращая промежуточные результаты с помощью оператора yield, а так же принимать через него дополнительные данные
async function работает подобным образом, но более узко: внутри можно использовать оператор await передав ему промис, async function при этом дождется пока промис зарезолвится (при этом await вернет результат) или зарежектится (внутрь будет брошено исключение). Так же важно знать, что async function всегда возвращает промис, даже если внутри не производилось никаких асинхронных действий. Пример: Замечу что данный код можно запустить только прогнав через babel с пресетом stage-3