【发布时间】:2013-04-30 15:14:15
【问题描述】:
我正在使用async library's parallel 函数,但遇到了一个奇怪的问题。我遍历一个对象数组来创建一个称为人的函数数组。人们被传入异步的并行方法以并行执行。但是,当我查看实际传递给“printFunction”的参数“people”时,这是错误的。 people 参数始终是我的 people 数组中的最后一个对象。
所以在这个例子中,printFunction 中的控制台日志会打印出来
{ 'name' : 'jar jar binks' }
{ 'name' : 'jar jar binks' }
代码:
var people = [{ 'name' : 'obi wan kenobi'}, { 'name' : 'jar jar binks' }];
// Create an array of tasks to be processed.
for(var i = 0; i < people.length; i++) {
tasks.push( function(callback) {
setTimeout( makePrintFunction(people[i], callback), 200);
});
}
// Process those tasks.
async.parallel(tasks, function(err, stuff) {
// ...do some stuff with the returned array here.
});
制作打印功能:
function makePrintFunction(people, next) {
return validateAndTrackFlag(people, next);
}
function printFunction(people, next) {
console.log(people); // Always prints: { 'name' : 'jar jar binks' }
next(null, true)
}
显然这不是真正的代码,我只是更改了名称和对象。
提前感谢您的帮助。
【问题讨论】:
-
由于您使用的是数组,也许async.each 或async.eachSeries 比使用
async.parallel更有意义。
标签: javascript node.js