如何在JavaScript中的Promise catch方法中抛出异常?

时间:2017-09-03 04:16:47

标签: javascript promise throw

我想要做的是在链中背靠背执行一些同步/异步功能 - 如果不对 - 拒绝此功能,最后在catch方法中捕获此拒绝的链,只是为用户抛出一个例外。我正在编写一个模块,如果他/她不正确地配置模块,我希望用户抛出一些消息。

当我尝试在Promise catch方法中抛出一个错误时,它会返回UnhandledPromiseRejectionWarning: Unhandled promise rejection异常。 正如我发现的那样,JS'throw同样对待reject()并且它期望在下一个链的末尾附加另一个catch方法来“捕获”这个抛出的错误,什么对我来说似乎有些过分,或者我可能没有得到承诺的想法......

test()
.then(()=>{
  console.log('success!');
})
.catch((msg)=>{
  throw new Error(msg);
});
//it expects another catch here to 'catch' the thrown error
//if I attach another catch() here
//then the 'UnhandledPromiseRejectionWarning' is not displayed
//but Error is still not thrown, just caught by another catch()

function test(){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      reject('you set incorrect type!');
    },300);
  });
}

我可以直接在Promise对象中抛出一个错误,以便抛出异常并按我的意愿终止链流,但我发现有点令人困惑的是我只能异步使用throw在Promise对象中抛出异常。如果我throw同步,Promise catch()方法会捕获此异常。

抛出错误:(这是可取的)

function test(){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      throw new Error('async aborted!'); 
    },300);
  });
}

执行Promise catch()可取)

function test(){
  return new Promise((resolve,reject)=>{
    throw new Error('sync aborted!');
    setTimeout(()=>{

    },300);
  });
}

所以,总结一下,我试着弄清楚如何在不获得UnhandledPromiseRejectionWarning: Unhandled promise rejection异常的情况下抛出错误? 在try catch块中我可以简单地重新抛出异常,为什么我不能在Promise链中这样做?

0 个答案:

没有答案