Javascript 顺序函数调用

Javascript 顺序函数调用,javascript,asynchronous,Javascript,Asynchronous,我有一个异步函数数组,需要按顺序调用,前一个函数的调用结果被传递到参数中。如何大致做到这一点?异步函数数组的最佳方法之一是使用for…of // lets say we have a function that takes a value and adds 20 to it asynchronously const asyncPlus20 = num => Promise.resolve(num+a) const arr = [asyncPlus20, asyncPlus20] let

我有一个异步函数数组,需要按顺序调用,前一个函数的调用结果被传递到参数中。如何大致做到这一点?

异步函数数组的最佳方法之一是使用for…of

// lets say we have a function that takes a value and adds 20 to it asynchronously
const asyncPlus20 = num => Promise.resolve(num+a)
const arr = [asyncPlus20, asyncPlus20]

let res = 0 // some starting value
for (const f of arr) res = await f(res)
// res is now 20
在控制台中运行以下代码段。>>还包括传递的参数

const twoSecondsPromise = () => {
    return new Promise((resolve) => {
        setTimeout(() => resolve('2000_'), 2000);
    })
};

const threeSecondsPromise = (val) => {
    return new Promise((resolve) => {
        setTimeout(() => resolve(val + '3000_'), 3000);
    })
};

const fiveSecondsPromise = (val) => {
    return new Promise((resolve) => {
        setTimeout(() => resolve(val + '5000_'), 5000);
    })
};

(async function () {
    const asyncFunctions = [twoSecondsPromise, threeSecondsPromise, fiveSecondsPromise];
    let result;
    for (const file of asyncFunctions) {
        result = await file(result);
        console.log(result);
     }
})();


尝试过?尝试过异步瀑布?@NullDev@Sascha eg
constfirstpromise=()=>newpromise((解析)=>setTimeout(()=>resolve(300)),300);const secondPromise=()=>newpromise((解析)=>setTimeout(()=>resolve(200)),200);const thirdPromise=()=>newpromise((解析)=>setTimeout(()=>resolve(100)),100);承诺系列([第一次承诺、第二次承诺、第三次承诺]);在300毫秒后执行resolve(300),然后在200毫秒后执行resolve(200),然后在100毫秒后执行resolve(100)
您认为这是最好的方法吗?与使用
wait
的简单循环相比,使用
reduce
和promissions会产生大量开销。Bergi,对不起,请您解释一下开销是什么意思。我认为reduce类似于for-of循环。这两种方法的区别是什么?
reduce
正在立即迭代整个阵列,并构建必须逐个解决的
N
承诺。带有
wait
ing主体的
for
循环没有,它更高效、更灵活。(如果使用
返回异步函数,我会理解。reduce((p,f)=>p.then(f),Promise.resolve(未定义))
它至少是优雅的,但是外部范围
结果
和复杂的
异步
/
等待
只是有太多的开销-尤其是语法上的)。