我想基于数组顺序执行一些异步函数。
我以为会这样做:
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
如何确保完全按顺序执行?
请注意,我知道如何在没有承诺的情况下做到这一点,我只对完整的承诺解决方案感兴趣。
答案 0 :(得分:2)
您使用的是旧版Bluebird。 .reduce
中v1
的行为已更改为以这种方式工作:
与
.map
和.filter
类似,.reduce
现在允许从迭代函数返回promises和thenable。
请更新到最新版本。这将导致代码正确运行。