Пошаговое выполнение функций, возвращающих промисы

В 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 такого последовательного ожидания не обеспечивает.

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

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

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

Подробнее