0

Node.jsで非同期を使用しています。実行する関数の数が決まっている場合は、正常に実行されます。

async.series([ 
    function(cb) { ...one ... },
    function(cb) { .. two ... },
], function(err, res) {
    ...done
});

しかし、1つの配列の値に応じて、任意の数の関数を実行する必要があり、配列要素を渡す方法がわかりません。

var values = [1, 2, 3, ... ];
var calls = [];
for (var i = 0; i < values.length; i++) {
    calls.push(function(cb) { 

        HOW TO PASS values[i] HERE? 

    });
}
async.series(calls, function(err, res) {
    ...done
});
4

2 に答える 2

2

これは、一般的なasync-in-a-loopの問題です。iプッシュされた関数式が宣言されている、の値のクロージャが必要になります。これは、ループ本体としてIEFEを使用して実行することも、.forEach()または.map():を使用してさらに簡単に実行することもできます。

 var calls = values.map(function closure(val, i) {
     return function(cb) {
         // use val and i here, which are bound to this execution of closure
     };
 });
于 2012-09-14T11:10:56.300 に答える
1

クロージャーを使用できるはずです。

var values = [1, 2, 3, ... ];
var calls = [];
for (var i = 0; i < values.length; i++) {
    calls.push((function(index) {
        return function(cb) {       
            // use values[index] here
        };
    })(i));
}
async.series(calls, function(err, res) {
    ...done
});
于 2012-09-14T11:10:14.457 に答える