我正在尝试调用一组由参数标识的异步函数。
示例: 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) {...});
}
答案 0 :(得分: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']);
答案 1 :(得分: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) {...});
}