Поиск…
Вступление
Функция 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
.