Последовательный await уже созданных Promise упорядочивает ожидание, но не их запуск: операции могли стартовать раньше. Для действительно последовательного запуска храните функции-фабрики.
Сериализованная обработка списка промисов
Последовательный await уже созданных Promise упорядочивает ожидание, но не их запуск: операции могли стартовать раньше. Для действительно последовательного запуска храните функции-фабрики.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо пройтись по массиву промисов так, чтобы переход к следующему начался лишь после завершения текущего. Реализовать последовательный запуск при помощи цикла.
let promises = [promise1, promise2, promise3, ...rest];
// Выполняем все промисы один за другим
Ответ
Последовательный await уже созданных Promise упорядочивает ожидание, но не их запуск: операции могли стартовать раньше. Для действительно последовательного запуска храните функции-фабрики.
async function runSequentially(tasks) {
const results = [];
for (const task of tasks) results.push(await task());
return results;
}
// tasks = [() => request1(), () => request2(), () => request3()]
Следующая фабрика вызывается только после успешного завершения предыдущей. Ошибка отклоняет общий Promise и прекращает запуск оставшихся задач. Если менять вход нельзя, for (const promise of promises) await promise лишь последовательно прочитает результаты; поздний rejected Promise может успеть вызвать предупреждение, пока код ждёт предыдущий.