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 в JavaScript: перебираемые объекты, итераторы и метод next, функции-генераторы с yield и свой перебираемый объект.