Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-处理来自不存在的函数的承诺错误_Javascript_Promise - Fatal编程技术网

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));
  }
});