一种选择是利用对象的属性以及通过字符串调用它们的能力。
我写了一个小样本Here并贴在下面。
我们的想法是,您在某个命名空间或对象中设置了您希望运行的一组函数,就像我在“myNamespace”中所做的那样:
myNamespace = {
"A": function() {return "A Function";},
"B": function() {return "B Function";},
"C": function() {return "C Function";}
}
然后你的主要承诺会运行,并且以某种方式(通过输入、ajax、提示等)你会得到你想要运行的函数的字符串值,直到运行时才知道:
我的主要承诺使用提示来获取用户的来信:
var answer = prompt('Starting. Please pick a letter: A,B,C');
if(myNamespace[answer] === undefined)
{
alert("Invalid choice!");
reject("Invalid choice of: " + answer);
}
else
{
resolve(answer);
}
在下一个“then”中,我使用该值(通过 resolve 函数传递)来调用该函数:
.then(function(response) {
funcToRun = myNamespace[response]();})
最后,我将动态函数调用的结果输出到 html 中,并使用一些递归的乐趣使其更具交互性并证明它是动态的:
.then(function(){
document.getElementById('result').innerHTML = funcToRun;})
.then(function(){
if(prompt("Run Again? (YES/NO)")==="YES")
{
doWork();
}
});
myNamespace = {
"A": function() {return "A Function";},
"B": function() {return "B Function";},
"C": function() {return "C Function";}
}
function doWork()
{
var funcToRun;
new Promise(function(resolve,reject) {
var answer = prompt('Starting. Please pick a letter: A,B,C');
if(myNamespace[answer] === undefined)
{
alert("Invalid choice!");
reject("Invalid choice of: " + answer);
}
else
{
resolve(answer);
}
})
.then(function(response) {
funcToRun = myNamespace[response]();})
.then(function(){
document.getElementById('result').innerHTML = funcToRun;})
.then(function(){
if(prompt("Run Again? (YES/NO)")==="YES")
{
doWork();
}
});
}
doWork();
<div id="result"></div>