@Mulch

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

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

Пример:
const first = () =>
  new Promise((resolve) => setTimeout(() => resolve(300)), 300);

const second= () =>
  new Promise((resolve) => setTimeout(() => resolve(200)), 200);

const third = () =>
  new Promise((resolve) => setTimeout(() => resolve(100)), 100);

promises([first, second, third]);
// Выполнит resolve(300) через 300 мс, потом resolve(200) через 200 мс, потом resolve(100) через 100 мс
// [300, 200, 100]


Куда копать?
  • Вопрос задан
  • 1302 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
async function chain(arr) {
  const result = [];

  for (const item of arr) {
    result.push(await item(result[result.length - 1]));
  }

  return result;
}

Или

function chain(arr) {
  const result = [];

  return arr
    .reduce((prev, curr) => prev.then(curr).then(r => (result.push(r), r)), Promise.resolve())
    .then(() => result);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bootd
@bootd
Гугли и ты откроешь врата знаний!
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы