我必须将一组函数传递给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');
});
贯穿但主要的回调没有被召唤 所以我不能说所有并行呼叫都已完成。
我在这里失踪了什么?
答案 0 :(得分:5)
看起来封锁在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的结果 - 它不会是回调函数,它会立即执行。