Последовательное выполнение промисов (Run Promises Sequentially)
3
Асинхронность
Условие:
Реализуйте функцию 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 = []
Выход: промис резолвится []