Javascript 使用承诺顺序执行函数
我想基于数组顺序执行一些异步函数 我以为这样就行了:Javascript 使用承诺顺序执行函数,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我想基于数组顺序执行一些异步函数 我以为这样就行了: var Promise = require("bluebird"); Promise.cast([1,2,3]).reduce(function(_,i){ console.log("Launching " + i); return Promise.delay(Math.floor(Math.random()*1000)).then(function(){ console.log("Executing "
var Promise = require("bluebird");
Promise.cast([1,2,3]).reduce(function(_,i){
console.log("Launching " + i);
return Promise.delay(Math.floor(Math.random()*1000)).then(function(){
console.log("Executing " + i);
});
},0);
但我明白了
Launching 1
Launching 2
Launching 3
Executing 2
Executing 1
Executing 3
而不是期望的结果
Launching 1
Executing 1
Launching 2
Executing 2
Launching 3
Executing 3
我如何确保在这里完全按顺序执行
请注意,我知道如何在没有承诺的情况下做到这一点,我只对完全承诺的解决方案感兴趣。您使用的是旧版本的Bluebird。
.reduce
的行为在v1
中更改为以下方式:
像.map
和.filter
,.reduce
现在允许从迭代函数返回承诺和表
()
请更新到最新版本。这将导致代码正确运行。是的,将Bluebird升级到1.0.8解决了问题。如果有人正在阅读此文件,并且“卡在”Bluebird的
版本上,无法更新-请告诉我,我将添加
答案-否则,我不希望有更多人升级到现代Bluebird。