为什么我的JavaScript Error监控没有捕获到Promise中的错误?
我给window绑定了onerror和onunhandledrejection,但发现Promise里的reject错误没有被监控到。比如这个代码:
window.onerror = (msg, url, line) => {
console.log('捕获到错误:', msg); // 这里没输出
};
Promise.reject('测试错误').catch(() => {}); // 我故意没处理这个catch
我原本以为未处理的Promise.reject会被onunhandledrejection抓到,但即使移除.catch()还是没触发。是不是这两个监听器的使用顺序有问题?或者Promise错误需要单独配置?
onunhandledrejection的触发机制。这个事件在Promise被reject且没有在当前事件循环中处理时才会触发。首先你得确认你的
onunhandledrejection处理器已经正确设置:其次要注意的是,如果你在Promise链上立即使用了.catch()(即使里面是空的),浏览器会认为这个错误已经被"处理"了,所以不会触发
onunhandledrejection。如果想真正测试未处理情况,去掉.catch()或者让catch块抛出新错误:
后端处理逻辑也类似,记得观察Promise链的完整执行流程。这种异步错误捕捉确实容易让人困惑,多调试几次就清楚了。有时候我也得对着代码发呆好久才能搞明白这些问题。
window.onunhandledrejection只捕获未处理的Promise错误,但你的.catch()已经算处理过了。如果想测试,去掉.catch()就行。正确示例:
就这样。