Логотип YeaHub

Последовательное выполнение промисов (Run Promises Sequentially)

3

JavaScript

Асинхронность

ИЦ «Ай-Теко»

Условие:
Реализуйте функцию runSequentially, которая принимает массив функций, каждая из которых при вызове возвращает промис. Функция должна выполнять эти промисы последовательно (не параллельно) — следующий запускается только после того, как предыдущий успешно завершился.

Если все промисы выполнились успешно, возвращаемый промис резолвится массивом результатов (в порядке следования исходных функций). Если хотя бы один из промисов отклоняется (reject), выполнение немедленно прекращается, и возвращаемый промис отклоняется с этой же ошибкой — оставшиеся промисы не запускаются.

Входные данные:
tasks — массив функций без аргументов, каждая из которых возвращает Promise (может быть пустым).

Выходные данные:
Promise, который:

  • резолвится массивом результатов всех промисов (в порядке tasks), если все выполнились успешно;

  • отклоняется с ошибкой первого зареджекченного промиса, если такой встретился (промисы после него не запускаются).

Ограничения:

  • 0 ≤ tasks.length ≤ 20

  • Каждая функция при вызове возвращает промис, который резолвится или реджектится с любой задержкой

  • Пустой массив — немедленный resolve с []

Пример:

Вход: tasks = [() => Promise.resolve(1), () => Promise.resolve(2), () => Promise.resolve(3)]
Выход: промис резолвится [1, 2, 3]

Вход: tasks = [() => Promise.resolve(1), () => Promise.reject('err'), () => Promise.resolve(3)]
Выход: промис отклоняется 'err' (третья функция не вызывается)

Вход: tasks = []
Выход: промис резолвится []
Loading...