场景:B端产品客户需求:不希望打开页面就看到都是报错(尽管不影响业务)
原因:在开发过程中,这种报错大多数是因为Promise没有进行catch((err)=>{处理err})
function main() {
asyncFunc().then(() => console.log('Done!'));
}
解决方案:
通过添加监听unhandledrejection事件获取由于未处理catch的promise
window.addEventListener('unhandledrejection', function (event) {
处理事件对象
event.reason //获取到catch的err的原因(内容) 与控制台报错一致
event.promise //获取到未处理的promise对象
.....
});
处理事件对象:
event && event.preventDefault() //通过阻止事件的默认行为,阻止控制台报错
注: Node.js v6.6.0+ 默认会报告未处理的Promise错误,因此不去监听unhandledrejection事件也没问题。
Fundebug的Node.js错误监控插件监听了unhandledRejection事件,因此可以自动捕获未处理Promise错误。
另: node.js端也有相应的处理方法,可借鉴:全局 Promise 异常捕捉 - 简书