Как в параметр функции передать результат вызова другой функции?
Функция принимает массив асинхронных функций и последовательно(следующая начинается, когда закончилась предыдущая) вызывает их, передавая в аргументы результат вызова предыдущей функции
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
→ Ссылка
В вашем коде несколько недоработок:
- Функции из массива не используют параметры.
- Вы не используете await, вызывая функцию первый раз, поэтому вместо результата получаете Promise.
- В конце каждой итерации вы пытаетесь передать этот же 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]));