Последовательный запуск асинхронных функций

Вызывайте функции по одной в цикле с await и ловите ошибку каждой отдельно, чтобы продолжить после отклонения. Передавать нужно функции, а не уже запущенные промисы.

Короткий ответ

Что ответить на собеседовании

Вызывайте функции по одной в цикле с await и ловите ошибку каждой отдельно, чтобы продолжить после отклонения. Передавать нужно функции, а не уже запущенные промисы.

Подробный разбор

Ответ с пояснениями

Условие

Напишите функцию, принимающую массив функций, каждая из которых возвращает промис, и обеспечьте их последовательное выполнение – следующая функция должна запускаться только после того, как предыдущий промис будет разрешён (или отклонён).

Ответ

Вызывайте функции по одной в цикле с await и ловите ошибку каждой отдельно, чтобы продолжить после отклонения. Передавать нужно функции, а не уже запущенные промисы.

async function runSequentially(tasks) {
  const results = [];
  for (const task of tasks) {
    try { results.push({ status: 'fulfilled', value: await task() }); }
    catch (reason) { results.push({ status: 'rejected', reason }); }
  }
  return results;
}

Следующая операция начинается после завершения предыдущей в любом состоянии. Результаты возвращаются в формате, похожем на allSettled. Синхронное исключение task тоже перехватывается. Если требуется остановка при первой ошибке, уберите локальный catch; это другой контракт, не заданный здесь.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

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

Подробнее