Как избежать использования eval для вызова разных функций - PullRequest
0 голосов
/ 24 января 2019

У меня есть этот бит кода, который включает eval, потому что я нашел, что проще всего вызывать различные фабричные функции, которые делают разные вызовы веб-службы.

Я прочитал, что это небезопасный и «подходящий» способДелать это.Ну, я не могу думать или найти лучший способ удовлетворить мои потребности.

Как я могу улучшить вызов?

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
        }
    )
};

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете использовать обе функции напрямую

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
        }
    )
};

или переместите функции в объект, ключом которого является метод доступа.

vm.saveRecord = function() {
    var services = { function1, function2, function3, function4 },
        service = vm.valueTrue
            ? vm.otherValue
                ? 'function1'
                : 'function2'
            : vm.otherValue
                ? 'function3'
                : 'function4';

    services[service].callEndPoint(param1, param2).then(
        function successCallback(response) {
            if(response) {
                //successful response
            }
        }, function errorCallback(response) {
            //error
        }
    )
};
0 голосов
/ 24 января 2019

Вы можете использовать дескриптор функции для выполнения функции.Это будет ссылка на функцию:

//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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...