В async-функции пройдите массив через for...of и используйте await перед вызовом следующего поставщика. Так операции не стартуют одновременно.
Пошаговое выполнение функций, возвращающих промисы
В async-функции пройдите массив через for...of и используйте await перед вызовом следующего поставщика. Так операции не стартуют одновременно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Вам необходимо реализовать функцию, которая принимает массив функций‑поставщиков промисов и последовательно их вызывает, дожидаясь завершения каждого. После выполнения всех функций должна быть возвращена массив‑коллекция полученных значений.
const fetchData = () => new Promise((resolve) => setTimeout(() => {
const value = Math.random();
console.log(`promise run for: ${value}`);
resolve(value);
}, 1000));
const sequentialPromises = (fnArray) => {};
(async () => {
const results = await sequentialPromises([fetchData, fetchData, fetchData]);
console.log(results); // должно вывести [number, number, number]
})();
Ответ
В async-функции пройдите массив через for...of и используйте await перед вызовом следующего поставщика. Так операции не стартуют одновременно.
const sequentialPromises = async fnArray => {
const results = [];
for (const create of fnArray) results.push(await create());
return results;
};
При первом исключении или reject функция отклонится, а ещё не вызванные поставщики не запустятся. Array.forEach с async-callback такого последовательного ожидания не обеспечивает.