5

配列に基づいていくつかの非同期関数を順次実行したいと考えています。

私はこれがそれを行うと思った:

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

ここで完全に順次実行するにはどうすればよいですか?

約束なしでそれを行う方法を知っていることに注意してください。完全な約束のソリューションにのみ興味があります。

4

1 に答える 1

2

古いバージョンの Bluebird を使用しています。の動作は次のよう.reduceに変更されましv1た。

.mapや と同様に.filter.reduce反復関数から promise と thenable を返すことができるようになりました。

(変更ログより)

最新バージョンにアップデートしてください。これにより、コードが正しく実行されます。

于 2014-03-04T15:19:46.950 に答える