真的在promise中抛出一个错误

时间:2017-07-13 16:13:41

标签: javascript promise try-catch

让我们说我有一个函数,它接受一些输入并对promise内的输入进行一些操作。如果输入是"无效"而不是仅仅在拒绝状态下返回承诺。我喜欢我的函数抛出错误。问题是,现在承诺捕获错误并转移到拒绝状态。这可能吗?

示例:

function myFunc(input) {
  return new Promise(function(resolve, reject) {
    if (input) {
      resolve();
    } else {
      throw 'invalid input!'; // ideally this should really throw, rather than just reject
    }
  });
}

我一直在玩这个并开始认为这是不可能的,但我想我会问这里是否有人知道如何实现这一点。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在构建返回Promise之前检查输入并扔到那里。这就是投入myFunc。

function myFunc(input) {
  if (!input)
      throw "invalid input!"
  return new Promise(function(resolve, reject) {
       // do stuff
       resolve(result);
       //if doesn't work
       reject(reason);

  });
}

如果输入为空,它将不会为您提供promise对象并抛出错误,这是您想要的。

try{
    myFunc();
}
catch(e)
{
    console.log("It does throw and doesn't give you the promise", e)
}

如果你想让诺言中的代码说出来,那就是一个错误,你真正需要做的就是拒绝...这就是拒绝的目的。基本上如果你想投入你要归还的承诺,你应该拒绝。

使用承诺时拒绝并捕获错误。

p1.then((result) => {
        // deal with result
    })
    .catch((reason)=>{
        // you get the error you rejected in the promise
    });