You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React异步方法抛出的异常无法被全局错误捕获器捕获

为什么window.onerror没被触发?
  • 异步错误不在window.onerror的捕获范围内
    你代码里在perform().catch()中重新抛出的错误属于异步错误,window.onerror只能捕获同步执行的全局错误。像Promise回调、async/await这类异步代码里的错误,得用window.addEventListener('unhandledrejection')来监听未处理的Promise拒绝。

  • React的错误机制拦截了错误
    React项目里有自己的错误边界(Error Boundary)机制,会捕获组件渲染过程中出现的错误,包括你在组件函数里抛的异步错误,这就阻止了错误冒泡到全局的window.onerror。

  • 重新抛出错误的上下文是异步的
    哪怕你在catch里重新throw了错误,这个操作是在Promise的回调里,属于异步上下文,不会触发同步的window.onerror;正常情况下会触发unhandledrejection事件,但如果React已经处理了这个错误,可能连这个事件也不会触发。

如果要捕获这类异步错误,可以试试换成unhandledrejection事件监听:

window.addEventListener('unhandledrejection', (event) => {
  alert("捕获到未处理的Promise拒绝: " + event.reason);
  event.preventDefault(); // 阻止默认的控制台报错提示
});

另外,React项目里更推荐用错误边界组件来处理组件内的错误,而不是依赖全局的window.onerror。

内容的提问来源于stack exchange,提问作者Nemo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:54:50