nodejs async与函数数组的相同参数?

时间:2011-08-29 22:49:56

标签: javascript node.js asynchronous

如何将相同的参数应用于函数数组?

使用:

async.parallel([func(arg, arg2), func2(arg, arg2)],
function() {
  next();
});

虽然数组里面有不确定/各种函数函数,所以我不确定我应该向并行方法发送哪些函数。

在各种文件中,我正在构建函数数组:

funcArray.push(func2)

结果我有一个这样的数组:

[func, func2]

我想这样做:

async.parallel(funcArray,
function() {
  next();
});

并将所有相同的参数应用于所有函数。我怎样才能做到这一点?感谢。

结束了我自己的写作:

  _.each(obj, function (func) {
    func(req, res, function () {
      i++
      if (i == objSize) {
        next()
      }
    })
  })      

1 个答案:

答案 0 :(得分:2)

未经测试,但这应该有效:

var args      = [ arg, arg2 ]
  , funcCalls = []
;

for(var i = 0; i < funcArray.length; i++) {
  funcCalls.push(function() {
    funcArray[i].apply(this, args); }
  );
}

async.parallel(funcCalls, next);

或者,如果您已经知道有多少参数,则不需要在中间部分使用apply

for(var i = 0; i < funcArray.length; i++) {
  funcCalls.push(function() {
    funcArray[i](arg, arg2); }
  );
}

最后,您可以使用例如由例如提供的地图功能来加强它。 Underscore.js

async.parallel(_.map(funcArray,
  function(func) { return function() { func(arg, arg2); } }
), next);

...但接下来遇到你代码的下一个人可能会杀了你。