我需要在调用函数之前检查一些条件,这些函数是从不同的js文件调用的,比如index.js或app.js.
在打电话给其他人之前检查这些条件的最佳方法是什么?想想你正在进行身份验证,如果用户通过身份验证,则调用该函数。我需要检查30个函数的条件。
我不需要对函数进行更改,而是需要编写一个函数/属性/无论什么以及需要影响其他函数。
file1.js:
function1
function2
function3
...
function30
file2.js:
file1.function1();
file3.js:
file1.function15();
答案 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-else
或switch
混乱您的代码,并且您希望以更简洁的方式执行此操作。我要做的是,制作一个配置文件并按以下方式执行:
import {function1, function2, function3, function4 ...} from './functions';
const FUNCTIONS_TO_RUN = {
auth: () => {
function1();
function2();
...
},
noAuth: () => {
function3();
function4();
...
},
....
};
在打电话给他们的时候,我会这样做:
FUNCTIONS_TO_RUN[conditionType]();
这不是确切的解决方案,而是一个如何以更清洁的方式实现它的想法。
conditionType
在这种情况下可以是auth
或noAuth
。