每次我只看到硬编码的调用时,如何在Javascript Promises中执行动态链接,例如,(promise).then(request/functionName).then(request/functionName)
一种选择是利用对象的属性以及通过字符串调用它们的能力。
我在这里写了一个小样本并将其发布在下面。
这个想法是,您希望在某些名称空间或对象中设置一组要运行的函数,就像在“ 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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句