使用promises顺序执行函数

Den*_*ret 5 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  " + i);
    });
},0);
Run Code Online (Sandbox Code Playgroud)

但我明白了

Launching  1
Launching  2
Launching  3
Executing  2
Executing  1
Executing  3
Run Code Online (Sandbox Code Playgroud)

而不是期望的结果

Launching  1
Executing  1
Launching  2
Executing  2
Launching  3
Executing  3
Run Code Online (Sandbox Code Playgroud)

如何确保完全顺序执行?

请注意,我知道如何在没有承诺的情况下做到这一点,我只对完整的承诺解决方案感兴趣.

Ben*_*aum 2

您正在使用旧版本的 Bluebird。的行为.reduce已更改为v1以下方式工作:

.mapand一样.filter.reduce现在允许从迭代函数返回 Promise 和 thenables。

来自变更日志

请更新到最新版本。这将使代码正确运行。