摘要:的错误监控插件监听了事件,因此可以自动捕获未处理错误。自从年双十一正式上线,累计处理了亿错误事件,付费客户有金山软件百姓网等众多品牌企业。
译者按: 通过监听unhandledrejection事件,可以捕获未处理的Promise错误。
原文: Tracking unhandled rejected Promises
译者: Fundebug
为了保证可读性,本文采用意译而非直译,并且对源代码进行了大量修改。另外,本文版权归原作者所有,翻译仅用于学习。
使用Promise编写异步代码时,使用reject来处理错误。有时,开发者通常会忽略这一点,导致一些错误没有得到处理。例如:
function main() { asyncFunc() .then(···) .then(() => console.log("Done!")); }
由于没有使用catch方法捕获错误,当asyncFunc()函数reject时,抛出的错误则没有被处理。
这篇博客将分别介绍在浏览器与Node.js中,如何捕获那些未处理的Promise错误。
浏览器中未处理的Promise错误一些浏览器(例如Chrome)能够捕获未处理的Promise错误。
unhandledrejection监听unhandledrejection事件,即可捕获到未处理的Promise错误:
window.addEventListener("unhandledrejection", event => ···);
这个事件是PromiseRejectionEvent实例,它有2个最重要的属性:
promise: reject的Promise
reason: Promise的reject值
示例代码:
window.addEventListener("unhandledrejection", event => { console.log(event.reason); // 打印"Hello, Fundebug!" }); function foo() { 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); // 打印"Hello, Fundebug!" }); window.addEventListener("rejectionhandled", event => { console.log("rejection handled"); // 1秒后打印"rejection handled" }); function foo() { return Promise.reject("Hello, Fundebug!"); } var r = foo(); setTimeout(() => { r.catch(e =>{}); }, 1000);Node.js中未处理的Promise错误
监听unhandledRejection事件,即可捕获到未处理的Promise错误:
process.on("unhandledRejection", (reason, promise) => ···);
示例代码:
process.on("unhandledRejection", reason => { console.log(reason); // 打印"Hello, Fundebug!" }); function foo() { Promise.reject("Hello, Fundebug!"); } foo();
注: Node.js v6.6.0+ 默认会报告未处理的Promise错误,因此不去监听unhandledrejection事件也没问题。
Fundebug的Node.js错误监控插件监听了unhandledRejection事件,因此可以自动捕获未处理Promise错误。
参考Promise Rejection Events Sample
Event: "unhandledRejection"
关于FundebugFundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家免费试用!
版权声明转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/10/09/unhandled-pomise-rejection/
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89113.html
摘要:写在前面这一章的顺序对于未接触过使用过的童鞋而言略抽象了,前边几章主要为了说明和之前的异步方式相比有什么优势和它能解决什么问题,后边才详解的设计和各种场景下如何使用。建议先了解和简单使用过后再阅读,效果更佳。 写在前面:Promise这一章的顺序对于未接触过使用过Promise的童鞋而言略抽象了,前边几章主要为了说明Promise和之前的异步方式相比有什么优势和它能解决什么问题,后边才...
摘要:三种状态进行中已完成,又称已失败。如果的状态是,那么的回调函数就会等待的状态改变,在此之前不会有结果。等价于例子例子的概念是实例的别名,用于指定发生错误时的回调函数。 『ES6知识点总结』变量的解构赋值 本文主要内容如下:1 Promise是什么?1.1 特点:1.2 三种状态:1.3 用处:1.4 Promise缺点:1.5 历史过程2 生成promise实例3 pr...
摘要:我打算分成前端魔法堂异常不仅仅是和前端魔法堂调用栈,异常实例中的宝藏两篇分别叙述内置自定义异常类,捕获运行时异常语法异常网络请求异常事件,什么是调用栈和如何获取调用栈的相关信息。 前言 编程时我们往往拿到的是业务流程正确的业务说明文档或规范,但实际开发中却布满荆棘和例外情况,而这些例外中包含业务用例的例外,也包含技术上的例外。对于业务用例的例外我们别无它法,必须要求实施人员与用户共同...
摘要:第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。采用链式的,可以指定一组按照次序调用的回调函数。这时,第二个方法指定的回调函数,就会等待这个新的对象状态发生变化。方法是的别名,用于指定发生错误时的回调函数。 本文我是在学习阮一峰老师的ECMAScript 6 入门的Promise章节时,为了加深记忆,通篇都是照抄原文的。原文地址:阮一峰ECMAScipt入门 1.Pr...
阅读 1187·2021-09-26 09:55
阅读 3105·2019-08-30 15:55
阅读 924·2019-08-30 15:53
阅读 2251·2019-08-30 13:59
阅读 2347·2019-08-29 13:08
阅读 1076·2019-08-29 12:19
阅读 3269·2019-08-26 13:41
阅读 398·2019-08-26 13:24