Javascript 顺序承诺

Javascript 顺序承诺,javascript,ecmascript-6,es6-promise,request-promise,Javascript,Ecmascript 6,Es6 Promise,Request Promise,因此,我试图在不使用异步的情况下按顺序执行我的承诺,下面是我的代码 //promises is an array of function who return a promise const p = function(promises){ let result = promises.reduce((prevPromise, promise) => { return prevPromise.then(res => { return pro

因此,我试图在不使用异步的情况下按顺序执行我的承诺,下面是我的代码

//promises is an array of function who return a promise
const p = function(promises){
    let result = promises.reduce((prevPromise, promise) => {
        return prevPromise.then(res => {
            return promise.then(Array.prototype.concat.bind(res))
        })
    }, Promise.resolve([]));
    return result;
}

现在假设promises数组有两个函数,分别在5秒和10秒内执行,上面的代码在10秒内给出答案,但如果真的是序列执行,则应该在15秒内给出答案。请建议。

在我看来<代码>承诺。减少只是将承诺链接起来,但没有延迟执行时间

承诺执行时间是您创建新承诺()时的时间。


然后
语句中创建新承诺。

这是因为您减少了承诺数组,而不是执行返回承诺的异步操作

以下面的示例为例,我们有一个
delay()
函数,它返回一个承诺,执行一个异步
setTimeout()
操作,在该操作中,它解析超时后的
ms
延迟

//一个函数,它返回的承诺只会解析
//设置超时完成后。
const delay=ms=>new Promise(解析=>setTimeout(
决定
太太
太太
));
//执行delay()函数的毫秒数组
常数项=[500010000];
//用于跟踪时间量的计时器
//在执行所有延迟后通过
控制台。时间(“延迟”);
//减少项目为延迟超时的所有承诺
//同时,还将添加此减少中的项目
const promise=items.reduce((promise,value)=>
//等待承诺的解决
承诺。然后(结果=>
//执行异步操作
延迟(值)
//将每个解析值相加
.然后(项目=>结果+项目)
),
//默认减少值
承诺。解决(0)
);
承诺。然后(结果=>{
//应该是项数组的总和
console.log('result',result);
//显示时间跟踪器,如果所有这些操作
//真的完成得恰到好处。
控制台。时间结束(“延迟”);

});
异步
/
等待
有什么问题?如果你已经有一系列承诺,你唯一能做的就是等待它们(使用
Promise.all
)。如果你想让东西按顺序执行,那就意味着你需要可以按顺序调用的函数。有很多理由不必不必要地使用Promise构造函数,但我怀疑它对性能的影响是否显著