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
相关产品推荐
相关产品推荐

