Поиск…


Вступление

Функция 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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow