在运行函数之前检查条件的最佳方法是什么

时间:2018-05-02 10:42:07

标签: javascript

我需要在调用函数之前检查一些条件,这些函数是从不同的js文件调用的,比如index.js或app.js.

在打电话给其他人之前检查这些条件的最佳方法是什么?想想你正在进行身份验证,如果用户通过身份验证,则调用该函数。我需要检查30个函数的条件。

我不需要对函数进行更改,而是需要编写一个函数/属性/无论什么以及需要影响其他函数。

file1.js:
function1
function2
function3
...
function30

file2.js:
file1.function1();

file3.js:
file1.function15();

3 个答案:

答案 0 :(得分:2)

为了在评论中提供我的建议示例,这是一种使用身份验证来包装每个功能的简单方法,而不会给您的呼叫添加太多混乱。

// Some mock up of you existing code
var authenticated = true;

function thing1() { alert(1); }
function thing2() { alert(2); }
function thing3() { alert(3); }

// New code
function checkAuthAndRun(func) {
  if (authenticated) {
    func();
  } else {
    console.log("User is not allowed to do this");
  }
}

// Calling your functions
checkAuthAndRun(thing1);
checkAuthAndRun(thing2);
checkAuthAndRun(thing3);

参数示例

// Some mock up of you existing code
var authenticated = true;

function thing1() {alert(1); }
function thing2(a) { alert(a); }
function thing3(a, b) { alert(a + b); }

// New code
function checkAuthAndRun(func) {
  if (authenticated) {
    // This line will need to have as many arguments[x] parameters as the function
    // with the most parameters that you will call through this method
    func(arguments[1], arguments[2]);
  } else {
    console.log("User is not allowed to do this");
  }
}

// Calling your functions
checkAuthAndRun(thing1);
checkAuthAndRun(thing2, "Parameter 1");
checkAuthAndRun(thing3, "Parameter 1", "Parameter 2");

答案 1 :(得分:0)

您可以使用&&将声明短路。

就像condition && fun()一样,只有当条件为真时才会调用fun()。

这就是&&运算符在JS中工作。如果第一个表达式是错误的,那么它将不执行其余的表达式,否则它将返回由以下表达式返回的值,当然在执行它们之后。

function auth(condition) {
 return condition;
}

function isOdd(n) {
 console.log(n," is odd ",n %2 == 0);
}

auth(false) && isOdd(3); //won't call
auth(false) && isOdd(4); //won't call
auth(true) && isOdd(5);
auth(true) && isOdd(6);

答案 2 :(得分:0)

如果我已经理解了您的问题,那么我想您不希望if-elseswitch混乱您的代码,并且您希望以更简洁的方式执行此操作。我要做的是,制作一个配置文件并按以下方式执行:

import {function1, function2, function3, function4 ...} from './functions';

const FUNCTIONS_TO_RUN = {
   auth: () => {
      function1();
      function2();
      ...
   },
   noAuth: () => {
      function3();
      function4();
      ...
   },
   ....
};
在打电话给他们的时候,我会这样做:

FUNCTIONS_TO_RUN[conditionType]();

这不是确切的解决方案,而是一个如何以更清洁的方式实现它的想法。

conditionType在这种情况下可以是authnoAuth