当前位置: 首页 > 后端技术 > Node.js

CatchunhandledPromiseerrors

时间:2023-04-03 22:43:50 Node.js

译者注:通过监听unhandledrejection事件,可以捕获未处理的Promise错误。原文:TrackingunhandledrejectedPromises译者:Fundebug为保证可读性,本文采用意译而非直译,并对源码进行了大量修改。另外,本文版权归原作者所有,转载仅供学习。使用Promises编写异步代码时,使用reject来处理错误。有时,开发人员往往忽略了这一点,导致一些错误得不到处理。例如:functionmain(){asyncFunc().then(···).then(()=>console.log('Done!'));}因为没有使用catch方法捕获错误,当asyncFunc()函数拒绝,抛出的错误不被处理。本博客将分别介绍如何在浏览器和Node.js中捕获那些未处理的Promise错误。浏览器中未处理的Promise错误某些浏览器(例如Chrome)能够捕获未处理的Promise错误。Unhandledrejection监听unhandledrejection事件,捕获未处理的Promise错误:window.addEventListener('unhandledrejection',event=>···);这个事件是PromiseRejectionEvent的一个实例,它有两个最重要的属性:promise:rejectedPromisereason:Promiserejectvalue示例代码:window.addEventListener('unhandledrejection',event=>{console.log(event.reason);//打印"Hello,Fundebug!"});functionfoo(){Promise.reject('Hello,Fundebug!');}foo();Fundebug的JavaScript错误监控插件监听unhandledrejection事件,因此可以自动捕获未处理的Promise错误.rejectionhandled当一个Promise错误最初未处理,但后来被处理时,将触发rejectionhandled事件:window.addEventListener('rejectionhandled',event=>···);此事件是PromiseRejectionEvent的一个实例。示例代码:window.addEventListener('unhandledrejection',event=>{console.log(event.reason);//print"Hello,Fundebug!"});window.addEventListener('rejectionhandled',event=>{console.log('rejectionhandled');//1秒后打印“rejectionhandled”});functionfoo(){returnPromise.reject('Hello,Fundebug!');}varr=foo();setTimeout(()=>{r.catch(e=>{});},1000);Node.js中未处理的Promise错误监听unhandledRejection事件以捕获未处理的Promise错误:process.on('unhandledRejection',(reason,promise)=>···);示例代码:process.on('unhandledRejection',reason=>{console.log(reason);//print"Hello,Fundebug!"});functionfoo(){Promise.reject('你好,Fundebug!');}foo();注意:Node.jsv6.6.0+默认会报unhandledPromise错误,所以不监听unhandledrejection事件也无妨。Fundebug的Node.js错误监控插件监听unhandledRejection事件,因此可以自动捕获未处理的Promise错误。Fundebug参考PromiseRejectionEventsSampleEvent:'unhandledRejection'Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、ReactNative、Node.js和Java在线应用的BUG实时监控。自2016年双十一正式上线以来,Fundebug累计处理了10亿+错误事件,其付费客户包括谷歌、360、金山、人民网等众多品牌公司。欢迎大家免费试用!转载版权声明请注明作者Fundebug及本文地址:https://blog.fundebug.com/2017/10/09/unhandled-pomise-rejection/