0

我在Node.js中使用异步。当我有固定数量的函数要执行时,它运行良好:

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

但是现在我需要执行任意数量的函数,具体取决于一个数组中的值,并且无法弄清楚如何传递数组元素:

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()or .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 回答