9

NodeJS の Async モジュールを使用して頭を悩ませようとしています。

次のコードがあります。

var a1 = [1,2,3,4,5,6,7,8];
async.forEachSeries(a1, function(n1, callback) {
    console.log(n1);
    var a2 = [10,11,12,13,14];
    async.forEachSeries(a2, function(n2, callback) {
        console.log(n1 + " " + n2);
        callback();
    });
    callback();
});

上記のコードの処理を、プリントアウトが

1
1 10
1 11
1 12
1 13
1 14
2
2 10
2 11
2 12
2 13
2 14
3
3 10
3 11
3 12
3 13
3 14
.....

しかし、代わりに私は..

1
1 10
2
2 10
1 11
3
3 10
2 11
1 12
....

これを修正するにはどうすればよいですか?

4

1 に答える 1

17

forEachMethod は、すべてが完了したときにコールバックも受け入れます。したがって、コードは次のようになります。

var a1 = [1,2,3,4,5,6,7,8];
async.forEachSeries(a1, function(n1, callback_s1) {
    console.log(n1);
    var a2 = [10,11,12,13,14];
    async.forEachSeries(a2, function(n2, callback_s2) {
        console.log(n1 + " " + n2);
        callback_s2();
    }, function () {
        /* Finished the second series, now we mark the iteration of first series done */ 
        callback_s1();
    } );
});

コードの問題は、async.forEachSeries が同期的であると想定しているという事実ですが、そうではありません。配列が同期的に処理されることは保証されますが、関数自体は非同期です。

于 2013-04-11T09:32:53.830 に答える