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

Throwing new error in catch block doesn't work

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

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

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

谢谢!

promise 链中引发的异常只能在同一 promise 链中稍后用 catch 拦截。它不能在承诺链之外看到(如果这是你的意图。)在你的例子中,例外是 "lost"。但是,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)