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

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

const firstPromise = () =>
  new Promise((resolve) => setTimeout(() => resolve(300)), 300);

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

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

Это результат моих раздумий:

async function promisesInSeries(asyncFns) {
    for(let i = 0; i < asyncFns.length; i++) {
        let func = asyncFns[i]()
        console.log(func)
        await asyncFns[i](func)
    }
}

Ответы (1 шт):

Автор решения: vsemozhebuty

В вашем коде несколько недоработок:

  1. Функции из массива не используют параметры.
  2. Вы не используете await, вызывая функцию первый раз, поэтому вместо результата получаете Promise.
  3. В конце каждой итерации вы пытаетесь передать этот же Promise той же самой, а не следующей функции.

Попробуйте так:

const firstPromise = () =>
  new Promise((resolve) => setTimeout(() => resolve(300)), 300);

const secondPromise = param =>
  new Promise((resolve) => setTimeout(() => resolve(param + 200)), 200);

const thirdPromise = param =>
  new Promise((resolve) => setTimeout(() => resolve(param + 100)), 100);



async function promisesInSeries(asyncFns) {
    let param;

    for(let i = 0; i < asyncFns.length; i++) {
        param = await asyncFns[i](param)
        console.log(param)
    }

    return param;
}

console.log(await promisesInSeries([firstPromise, secondPromise, thirdPromise]));
→ Ссылка