捕获未处理的Promise错误
来源:互联网 发布:电脑系统维护软件 编辑:程序博客网 时间:2024/06/05 08:08
译者按: 通过监听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的Promisereason
: 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’
版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/10/09/unhandled-pomise-rejection/
- 捕获未处理的Promise错误
- nodejs 捕获 promise 未处理的 reject
- C# 捕获未处理的异常
- WPF捕获未处理的异常
- 捕获asp.net下的未处理异常
- C# WinForm捕获未处理的异常
- C# WinForm捕获未处理的异常
- C# WinForm捕获未处理的异常
- C#_WinForm 统一捕获未处理的异常
- 捕获asp.net下的未处理异常
- C# WinForm捕获全局异常(捕获未处理的异常)
- 出现错误 未处理的TypeInitializationException
- C#捕获未处理异常
- nodejs 捕获未处理异常
- 未处理异常的捕获发送及简单调试(上部)
- asp.net捕获全局未处理异常的几种方法
- Android_程序未处理异常的捕获与处理
- C# WinForm捕获未处理的异常实例解析
- 常见矩阵运算Python
- 第七周 项目6
- 这几个软件你能没听过,但真的每个都好用到爆
- 高并发Java(1):前言
- java设计模式之单例模式
- 捕获未处理的Promise错误
- 神经网络与深度学习学习笔记:神经网络的优化(二)
- 数据结构和算法--常见的排序算法
- 第四周项目4
- eclipse的vim插件
- Eclipse 与模拟器无法连接报:The connection to adb is down, and a severe error has occured.异常
- Qt使用QList遇到Heap corruption detected.
- linux 内存不足
- 第七周项目1