如何通过名称调用函数并作为参数传递?我的用例是下一个,我有一个 switch case
,我在其中设置 api ajax 调用的data
,一旦 ajax 完成,就应该调用 print函数
将数据结果作为参数传递。我不确定这是一个好方法,有没有更好、更简单的方法来完成我正在尝试的事情?也许使用async
/promises
?
function printUpcoming(data) {
//stuff
}
function printRecently(data) {
//stuff
}
function printPopular(data) {
//stuff
}
function requestAjax(dataSend, callFunctionByName) {
$.ajax({
type: "POST",
url: "api-url",
headers: {
"Accept": "application/json",
"user-key": "userkey"
},
data: dataSend,
dataType: 'json',
success: function(data) {
jsonVal = data[0];
//Call the function print depending of switch case option
callFunctionByName(jsonVal);
}
});
}
switch (param) {
case "upcoming":
dataSend = "fields * where whatever 1";
functionName = printUpcoming();
requestAjax(dataSend, functionName);
break;
case "recently":
dataSend = "fields * where whatever 2";
functionName = printRecently();
requestAjax(dataSend, functionName);
break;
case "popular":
dataSend = "fields * where whatever 3";
functionName = printPopular();
requestAjax(dataSend, functionName);
break;
}
最佳答案
一种选择是将函数分组到一个对象中:
const Printer = {
upcoming(data) {...},
recently(data) {...},
popular(data) {...},
}
然后
requestAjax(dataSend, param)
以及在requestAjax
Printer[funcName](jsonVal))
正如@VLAZ 建议的那样,另一个选择是完全摆脱回调:
async function requestAjax(dataSend) {...}
...
printUpcoming(await requestAjax(...))
示例:
function printUpcoming(x) {
console.log('Upcoming!', x)
}
async function request() {
return $.ajax('https://jsonplaceholder.typicode.com/todos/1')
}
async function process(param) {
switch (param) {
case "upcoming":
printUpcoming(await request());
break;
case "recently":
printRecent(await request());
break;
}
}
process('upcoming')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
关于javascript - 如何通过名称调用函数并作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753731/