我有一个奇怪的情况,我需要检查用户插入的函数的值,理想情况下,如果用户插入不存在的函数,则返回错误的promise。我正在思考这些问题:
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
是用户插入的内容。但是当然这个赠品可以给我一个" userSelected
不是一个功能"如果他们插入的东西不是customClass的方法。有没有正确的方法来检查这个承诺,或者我只需要用switch语句或类似的东西进行检查?
答案 0 :(得分:2)
我认为这里不需要任何承诺,但要明白你的问题:
假设你有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 try {
resolve(customClass[input](1, 2));
} catch (e) {
reject(new Error(input + " failed with an error: " + e.message));
}
});
请注意,如果我们不想为它提供自定义错误,我们不必捕获调用该方法的异常; promise执行函数中的错误抛出拒绝承诺。因此,如果您只想让原始错误成为拒绝:
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));
}
});