将函数数组传递到异步并行



我必须将一组函数传递给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的结果,它不会是回调,它会立即执行。

最新更新