Как работает асинхронная итерация в ES6+ с использованием for-await-of?
Этот вопрос проверяет понимание работы асинхронных итераторов и их использование для обработки асинхронных потоков данных в ES6+.
Короткий ответ
Асинхронная итерация с использованием for-await-of позволяет работать с асинхронными итераторами, такими как асинхронные генераторы или промисы, которые возвращают данные постепенно. Оператор for-await-of ждет разрешения каждого промиса перед переходом к следующей итерации. Это удобно для обработки потоков данных или последовательных асинхронных операций.
Длинный ответ
Асинхронная итерация была введена в ES2018 и позволяет перебирать коллекции данных, которые поступают асинхронно. Обычно используется с асинхронными генераторами, которые возвращают промисы. В цикле for-await-of каждый промис, возвращаемый итератором, разрешается перед тем, как код переходит к следующему значению.
Пример использования:
async function* asyncGenerator() {
yield new Promise(resolve => setTimeout(() => resolve("Data 1"), 1000));
yield new Promise(resolve => setTimeout(() => resolve("Data 2"), 1000));
}
(async () => {
for await (let value of asyncGenerator()) {
console.log(value); // Выведет "Data 1" и "Data 2" с задержкой
}
})();for-await-of блокирует каждую итерацию до тех пор, пока текущий промис не разрешится, что делает его полезным для работы с потоками данных или с последовательными асинхронными задачами. Это упрощает обработку данных, которые поступают по мере их готовности, например, данные от API или чтение файлов.