我有一堆通过需要从$q.all([funcA(),funcB(),funcC()])
执行的服务加载的函数。然后,我有一个json文件,该文件告诉脚本要处理的服务。我遇到的问题是将json值保存到一个数组中,该数组可以传递给$q.all(doFuncs).then
,其中数组的值将作为函数处理。
如上所述,功能/服务是从较早的全局脚本加载的,该脚本定义为:
function funcA() {
// do something
}
function funcB() {
// do something
}
function funcC() {
// do something
}
从远程服务器动态加载的json文件将允许我打开/关闭要根据需要处理的不同供应商:
json:
var vendorObj = {
"vendorA" : {
"cName" : "Foo Company",
"active" : 1,
"funcName" : "funcA"
},
"vendorB" : {
"cName" : "Bar Company",
"active" : 0,
"funcName" : "funcB"
},
"vendorC" : {
"cName" : "FooBar Company",
"active" : 1,
"funcName" : "funcC"
}
}
如果“ active == 1”,则遍历json,然后将函数名称添加到数组中。
var doFunctions = [] ;
for (var key in vendorObj) {
if (vendorObj[key].active == 1) {
doFunctions.push(window[vendorObj[key].funcName]) ;
}
}
如果我像在此for循环中那样处理它们,则它可以正常工作,添加/激活的函数将正确执行: 为(var x = 0; xx; }
但是,在$q.all()
中,当手动定义时,函数在数组中以'$ q.all( [funcA(),funcC(),funcG()] )的形式传递.then(function(response){...})'
所以我遇到的问题是如何传递doFunctions
,因此每个值都可以自动识别为一个函数,因为我不能仅在声明每个数组值后添加()
数组名称,如下所示:
$q.all(doFunctions).then(function(response) {
// process `response`
}