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

时间:2011-06-27 18:02:35

标签: javascript asynchronous node.js

我必须将一组函数传递给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');
                });

贯穿但主要的回调没有被召唤 所以我不能说所有并行呼叫都已完成。

我在这里失踪了什么?

1 个答案:

答案 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的结果 - 它不会是回调函数,它会立即执行。