在catch块中抛出新错误并不起作用

时间:2016-09-06 14:51:19

标签: javascript error-handling promise throw

我正在做一些异步操作,并且我使用Promise的本机实现来控制执行流程:

Promise.resolve({})
   .then(...)
   .then(...)
   .then(...)
   .catch((error) => { throw new Error(error) });

没有抛出任何错误,但当我更改为console.log时,一切正常。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

在promise链中引发的异常只能在稍后的同一个promise链中使用catch来拦截。它在promise链之外是不可见的(如果这是你的意图。)在你的例子中,例外是"丢失"。但是,Chrome和其他一些浏览器检测到这种情况,并在控制台中发出未处理异常的警告。

具有例外的正确承诺链将是:

Promise.resolve({})
   .then(...)
   .then(() => { throw new Error(error); }) // throw exception here
   .then(...) 
   .catch((error) => { /* handle error */ }); // catch it later in promise chain
   .then(...)
   .then(() => { throw new Error(error); }) // this exception is not caught later in the promise and is lost (shown as unhandled exception in some browsers)