У меня есть набор функций, которые загружаются через сервисы, которые должны выполняться из $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"
}
}
Цикл по json, если "active == 1", затем добавить имя функции в массив.
var doFunctions = [] ;
for (var key in vendorObj) {
if (vendorObj[key].active == 1) {
doFunctions.push(window[vendorObj[key].funcName]) ;
}
}
Если я обработаю их, как в этом цикле for, он работает, добавленные / активные функции выполняются правильно:
for (var x=0;x<doFunctions.length;x++) {
doFunctions[x]() ;
//even as promises this works, they are just processed individually
}
Однако в $q.all()
при определении вручную,функции передаются в массиве как '$ q.all ( [funcA (), funcC (), funcG ()] ). then (function (response) {...})'
Итак, у меня проблема в том, как передать doFunctions
, чтобы каждое значение автоматически распознавалось как функция, поскольку я не могу добавить ()
после каждого значения массива, просто указав имя массива, как вследующее:
$q.all(doFunctions).then(function(response) {
// process `response`
}