Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник JavaScript

for await...of

Перебирает асинхронные источники данных, дожидаясь каждого элемента.

Доступно с: ES2018

Синтаксис

for await (const item of asyncIterable) { … }

Примеры

Перебор массива промисов:

const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms));
 
for await (const value of [wait(100, 'first'), wait(50, 'second')]) {
  console.log(value);
}

Результат:

first
second

Асинхронный генератор — данные приходят частями:

async function* pages() {
  for (let page = 1; page <= 3; page++) {
    await new Promise((resolve) => setTimeout(resolve, 20));
    yield `page ${page}`;
  }
}
 
for await (const page of pages()) {
  console.log(page);
}

Результат:

page 1
page 2
page 3

Примечания

Порядок элементов сохраняется: даже если второй промис выполнится раньше, он будет выведен вторым.

См. также

  • for...of — Перебирает значения массива, строки, Map, Set и других перебираемых объектов.
  • await — Ждёт результата промиса и возвращает его значение.
  • function* — Функция-генератор: выдаёт значения по одному через yield.

Вопросы и ответы по теме

В учебнике

  • Итераторы и генераторы — Как работает for...of в JavaScript: перебираемые объекты, итераторы и метод next, функции-генераторы с yield и свой перебираемый объект.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.