0

パラメータで識別される非同期関数のグループを呼び出そうとしています。

例: と の両方をcallFunctions("A,C");呼び出します。objFns["A"]objFns["C"]

私が遭遇した問題はarrayParams[i]、内部関数が によって最終的に呼び出されたときに解決されることasync.parallel()です。これは、定義されていないi == arrayParams.lengthためもちろんクラッシュすることを意味します。objFns[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 に答える