我在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
});
答案 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
});