我必须将一组函数传递给node.js.的async.js模块
文档的正常方式是:
async.parallel([
function(callback){
setTimeout(function(){
callback(null, 'one');
}, 200);
},
function(callback){
setTimeout(function(){
callback(null, 'two');
}, 100);
},
],
// optional callback
function(err, results){
});
我试过这样:
for(var i = 0; i < jsonData.length; i++)
{
...
o.url = serviceurl;
o.title = jsonData[i];
var ff = function(callback){
obj.loadService(o.title,o.url,callback);
}
callItems.push(ff(function(){return true;}));
}
async.parallel(
callItems,
// optional callback
function(err, results){
console.log('all calls called without any errors');
}
);
这会贯穿始终,但不会调用主回调。所以我不能说是否所有的并行调用都完成了。
我在这里错过了什么?
在for循环中,闭包的形式似乎不正确。尝试一个外部函数,返回您当前分配给ff的值。例如:
for(var i = 0; i < jsonData.length; i++)
{
...
o.url = serviceurl;
o.title = jsonData[i];
var ff = makeCallbackFunc(obj, o.title, o.url);
callItems.push(ff(function () {return true;}));
}
function makeCallbackFunc(obj, title, url) {
return function (callback) {
obj.loadService(title, url, callback);
};
}
我对您添加到callitems的内容有点困惑,也就是用函数参数调用ff的结果,它不会是回调,它会立即执行。