为什么promise 拒绝/捕获方法中抛出的错误不会触发全局错误处理程序?

function doPromise() {
    return Promise.reject()
}

window.addEventListener('error', function (e) { console.log('Global handler ' + e.message) })

doPromise()
 .then()
 .catch(e => {
    console.log('Promise catch')
    throw new Error('Promise catch error')  // Does not trigger global error handler
  })
    
throw new Error('Core error')  // To prove global error handler is working

推荐答案

这不是错误,而是Unhandled Rejection:

当没有拒绝处理程序的JavaScriptpromise 被拒绝时,unhandledrejection事件被发送到脚本的全局范围

代码的工作版本:

function doPromise() {
    return Promise.reject()
}

window.addEventListener('error', function(e) {
    console.log('Global handler ' + e.message)
})
window.addEventListener('unhandledrejection', event=>{
    console.log('Unhandled rejection', event)
}
);

doPromise().then().catch(e=>{
    console.log('Promise catch')
    throw new Error('Promise catch error')
    // Does not trigger global error handler
}
)

throw new Error('Core error')
// To prove global error handler is working

Javascript相关问答推荐

在React中获取数据后,如何避免不必要的组件闪现1秒?

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

Plotly热图:在矩形上zoom 后将zoom 区域居中

google docs boldText直到按行执行应用脚本错误

在react js中使用react—router—dom中的Link组件,分配的右侧不能被 destruct ''

Chart.js-显示值应该在其中的引用区域

如何修复我的数据表,以使stateSave正常工作?

对网格项目进行垂直排序不起作用

在使用REACT更改了CSS类之后,无法更改CSS样式

如何在JAVASCRIPT中临时删除eventListener?

令牌JWT未过期

为列表中的项目设置动画

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

如何在Java脚本中对数据进行签名,并在PHP中验证签名?

在JS/TS中构造RSA公钥

在ReactJS上挂载组件时获得多个身份验证请求

Select 所有输入.值

是否在图表中计算线上的点坐标?

我遇到了Phaser 3碰撞的问题

ReactJS -使用useRef和将变量放在组件之外有什么区别?