我有包含eval
的这段代码,因为我发现最容易调用进行不同Web服务调用的不同工厂函数。
我已经读到这样做是不安全和“适当”的方式。好吧,我无法思考或找到适合我需要的更好方法。
如何改善通话?
vm.saveRecord = function() {
var service = '';
if(vm.valueTrue) {
service = vm.otherValue ? 'function1' : 'function2';
} else {
service = vm.otherValue ? 'function3' : 'function4';
}
eval(service).callEndPoint(param1, param2).then(
function successCallback(response) {
if(response) {
//successful response
}
}, function errorCallback(response) {
//error
}
)
};
答案 0 :(得分:2)
您可以使用功能手柄执行功能。这将是对该函数的引用:
//existing functions
function one() { console.log("one") };
function two() { console.log("two") };
function three() { console.log("three") };
//function that will execute other functions
function exec(number) {
//we will assign a function here
let toExecute;
//simple condition to choose the function to execute at the end
if (number == 1) {
toExecute = one;
} else if (number == 2) {
toExecute = two;
} else if (number == 3) {
toExecute = three;
}
//adding () executes whatever function is assigned to the variable
toExecute();
}
exec(3);
exec(2);
exec(1);
答案 1 :(得分:2)
您可以直接使用其中任一功能
nx=1
或将功能移动到键为访问器的对象中。
vm.saveRecord = function() {
var service = vm.valueTrue
? vm.otherValue
? function1
: function2
: vm.otherValue
? function3
: function4;
service.callEndPoint(param1, param2).then(
function successCallback(response) {
if(response) {
//successful response
}
}, function errorCallback(response) {
//error
}
)
};