Поиск…
Вступление
Функция async функция, которая возвращает обещание. await доходности вызывающего абонента до тех пор, пока обещание не решится, а затем продолжит результат.
Итератор позволяет собирать коллекцию с помощью цикла for-of loop.
Асинхронный итератор представляет собой коллекцию, в которой каждая итерация является обещанием, которое можно for-await-of цикл for-await-of .
Асинхронные итераторы являются предложением этапа 3 . Они находятся в Chrome Canary 60 с --harmony-async-iteration
Синтаксис
- async function * asyncGenerator () {}
- yield wait asyncOperationWhichReturnsAPromise ();
- для ожидания (пусть результат asyncGenerator ()) {/ * result - это разрешенное значение из обещания * /}
замечания
Асинхронный итератор является декларативным потоком тянуть в отличие от декларативного нажимного потока наблюдаемого в.
Полезные ссылки
основы
Iterator JavaScript - это объект с .next() , который возвращает IteratorItem , который является объектом со value : <any> и done : <boolean> .
JavaScript AsyncIterator - это объект с .next() , который возвращает Promise<IteratorItem> , обещание следующего значения.
Чтобы создать AsyncIterator, мы можем использовать синтаксис асинхронного генератора :
/**
* Returns a promise which resolves after time had passed.
*/
const delay = time => new Promise(resolve => setTimeout(resolve, time));
async function* delayedRange(max) {
for (let i = 0; i < max; i++) {
await delay(1000);
yield i;
}
}
Функция delayedRange будет принимать максимальное число и возвращает AsyncIterator , который дает числа от 0 до этого числа с интервалом в 1 секунду.
Использование:
for await (let number of delayedRange(10)) {
console.log(number);
}
for await of цикла - это еще один фрагмент нового синтаксиса, доступный только внутри асинхронных функций, а также генераторы асинхронных сигналов. Внутри цикла значения, полученные (которые, помните, являются обещаниями), разворачиваются, поэтому Promise скрывается. Внутри цикла вы можете иметь дело с прямыми значениями (сведенными числами), for await of цикла будет ждать обещаний от вашего имени.
Вышеприведенный пример будет ждать 1 секунду, log 0, ждать вторую секунду, log 1 и т. Д., AsyncIterator он не войдет в систему 9. В этот момент AsyncIterator будет done , и for await of цикла будет done .