0

我正在尝试调用一组由参数标识的异步函数。

示例: callFunctions("A,C");将同时调用objFns["A"]objFns["C"]

我遇到的问题arrayParams[i]是当内部函数最终由async.parallel(). 这意味着i == arrayParams.lengthwhich of course crash sinceobjFns[arrayParams.length]是未定义的。帮助我指出正确的方向将不胜感激。

objFns = {};
objFns["A"] = function (callback) {...}
objFns["B"] = function (callback) {...}
objFns["C"] = function (callback) {...}

function callFunctions(arrayParam) {
    var i, arrayFns = [];

    for (i = 0; i < arrayParams.length; i++) {
        arrayFns.push(function (callback) {
            objFns[arrayParams[i]](callback);
        }
    }

    async.parallel(arrayFns, function (error) {...});
}
4

2 回答 2

1

i您可以使用匿名函数在每次迭代时进行复制。

var async = require('async');

objFns = {};
objFns["A"] = function (callback) {callback();};
objFns["B"] = function (callback) {callback();};
objFns["C"] = function (callback) {callback();};

function callFunctions(arrayParams) {
  var i,arrayFns = [];

  for (i = 0; i < arrayParams.length; i++) {
    (function (i) {
      arrayFns.push(function (callback) {
        objFns[arrayParams[i]](callback);
      });
    })(i);
  }

  async.parallel(arrayFns,function(error) {
  });
}

callFunctions(['A', 'B']);

如果您不需要更改函数行为,您可以简单地将函数复制到没有外部函数的数组。

var async = require('async');

objFns = {};
objFns["A"] = function (callback) {callback();};
objFns["B"] = function (callback) {callback();};
objFns["C"] = function (callback) {callback();};

function callFunctions(arrayParams) {
  var i,arrayFns = [];

  for (i = 0; i < arrayParams.length; i++) {
    arrayFns.push(objFns[arrayParams[i]]);
  }

  async.parallel(arrayFns,function(error) {
  });
}

callFunctions(['A', 'B']);
于 2013-03-31T23:09:07.737 回答
1

据我所知,您推送到 arrayFns 的是一个函数,它直接调用具有相同参数的另一个函数,是否有任何理由不应该工作:

function callFunctions(arrayParam)
{
  var i,arrayFns = [];

  for (i = 0; i < arrayParams.length; i++)
  {
    arrayFns.push(objFns[arrayParams[i]]);
  }

  async.parallel(arrayFns,function(error) {...});
}
于 2013-03-31T23:10:10.757 回答