如何使用async在node.js中运行变量系列或javascript函数?

时间:2012-09-14 11:01:47

标签: javascript node.js asynchronous

我在Node.js中使用async当我有一定数量的函数要执行时,它运行正常:

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
});

2 个答案:

答案 0 :(得分:2)

这只是常见的异步循环问题。您需要一个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
     };
 });

答案 1 :(得分: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
});