javascript - 在 catch block 中抛出新错误不起作用

标签 javascript error-handling promise throw

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

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

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

谢谢!

最佳答案

promise 链中引发的异常只能通过稍后在同一 promise 链中的 catch 来拦截。在 promise 链之外看不到它(如果这是您的意图)。在您的示例中,异常是“丢失”。但是,Chrome 和其他一些浏览器会检测到这种情况,并在控制台中发出未处理异常的警告。

有异常(exception)的正确 promise 链是:

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)

关于javascript - 在 catch block 中抛出新错误不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39352008/

相关文章:

javascript - Access-Control-Allow-Headers 不允许请求 header 字段 Access-Control-Allow-Headers

javascript - 循环内嵌套的 findOrCreate 上的 SequelizeForeignKeyConstraintError

error-handling - Authorize.net AVS错误页面处理

javascript - 什么时候以及为什么创建自定义异常是好的?

c++ - 编写了一个C++代码以检查表达式是否具有平衡的括号并且我的代码未运行。我被困了一天

javascript - 使用 $q,努力让拒绝在 AngularJS 中级联

javascript - BlueBird promise 中的特定错误捕获

javascript - json-server - 奇怪的自动增量 ID

javascript - Internet Explorer/Firefox 中的硬刷新和 XMLHttpRequest 缓存

javascript - PouchDB IE11 使用文件 ://