Javascript-处理来自不存在的函数的承诺错误
我遇到了一个奇怪的情况,我需要检查用户插入的函数的值,理想情况下,如果用户插入了一个不存在的函数,承诺会返回一个错误。我是这样想的:Javascript-处理来自不存在的函数的承诺错误,javascript,promise,Javascript,Promise,我遇到了一个奇怪的情况,我需要检查用户插入的函数的值,理想情况下,如果用户插入了一个不存在的函数,承诺会返回一个错误。我是这样想的: var p = new Promise(function(resolve, reject) { var customVar = customClass.userSelected(1, 2); if (customVar) { console.log("Success!"); resolve(data); } else { c
var p = new Promise(function(resolve, reject) {
var customVar = customClass.userSelected(1, 2);
if (customVar) {
console.log("Success!");
resolve(data);
} else {
console.log("Failure!");
reject(err);
}
});
其中
userSelected
是用户插入的内容。当然,如果他们插入了不是customClass方法的内容,那么这个give可以给我一个“userSelected
不是函数”。有没有合适的方法用承诺来检查这一点,还是我只需要用switch语句或类似的语句来检查?我认为这里没有必要承诺,但我想谈谈你问题的重点:
假设您有input
,一个包含从用户处获得的函数名的变量(可能是“foo”
)。通过检查它,可以确保它存在于customClass
上:
if (typeof customClass[input] === "function") {
// Yes, it's a function
}
在那里,如果input
是“foo”
,您就知道customClass
有一个名为foo
的属性,其值是一个函数
因此,如果我们将其插入到您的示例中(但是,我不明白为什么我们需要对此做出承诺):
注意,如果我们不想为该方法提供自定义错误,则不必捕获调用该方法的异常;承诺执行器函数中的错误抛出会拒绝该承诺。因此,如果您只想将原始错误作为拒绝:
var input = /*...the function name from the user...*/
var p = new Promise(function(resolve, reject) {
if (typeof customClass[input] !== "function") {
reject(new Error(input + " is not a valid method"));
} else {
resolve(customClass[input](1, 2));
}
});
为什么你需要一个同步东西的承诺???你是从用户输入生成代码吗?用户如何向您提供
userSelected
部分?(还有:数据是什么?
“?不知从哪里冒出来的…)你是说某个类[userSelected]()
?想法是使用基于用户输入的承诺来运行测试。我还不知道它将如何给出。尝试领先于曲线。userSelected
是什么?它是如何定义的……Show code我不知道,我投了赞成票并接受了lol。感谢你给我展示了一个更好的方法来做到这一点!
var input = /*...the function name from the user...*/
var p = new Promise(function(resolve, reject) {
if (typeof customClass[input] !== "function") {
reject(new Error(input + " is not a valid method"));
} else {
resolve(customClass[input](1, 2));
}
});