全局监控Promise错误
一、问题引入
Promise 在前端中的使用已经非常普遍了,但是许多开发者或许习惯了链式调用却忘了捕获 Promise 的错误了。
例如:
function forgetCatchError () {
async()
.then(() => {
// code..
})
.then(() => console.log('forget catch error!'));
}
上面的示例代码中 async() 中和后续的两个 then 中的代码如果出错或者 reject ,错误没有得到处理。
在没有使用 catch 方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。当promise被 reject 并且错误信息没有被处理的时候,会抛出 unhandledrejection,这个错误不会被 window.onerror 和 addEventListener("error") 所监听到。
二、try catch
// 示例
async function fn() {
let value = await new Promise((resolve, reject) => {
reject('failure');
});
console.log('do something...');
}
fn()
未使用try catch,导致浏览器报错:一个未捕获的错误

所以在开发过程中,为了保证系统健壮性,或者是为了捕获异步的错误,需要频繁的在 async 函数中添加 try/catch,避免出现示例的情况
注:可以引入插件如babel编译插件(babel-plugin-await-add-trycatch),给全局async await添加 try catch代码块
三、全局监控方法
对 unhandledrejection 事件进行监听即可捕捉到未被 catch 的 Promise 错误。
window.addEventListener("unhandledrejection", err => {
console.log(err.reason)
err.preventDefault();
}, false);
// 或者
window.onunhandledrejection = function(err) {
console.log(err.reason);
return true;
}
addEventListener 中调用 event 的 preventDefault() 可以让 Promise 的错误不抛送到控制台,在 onunhandledrejection 中则可以使用 return true 来达到相同的效果。
全局监控Promise错误的更多相关文章
- 捕获未处理的Promise错误
译者按: 通过监听unhandledrejection事件,可以捕获未处理的Promise错误. 原文: Tracking unhandled rejected Promises 译者: Fundeb ...
- 微信小程序:封装全局的promise异步调用方法
微信小程序:封装全局的promise异步调用方法 一:封装 function POST(url, params) { let promise = new Promise(function (resol ...
- EMS邮箱数据库全局监控设置
案例任务:监控TestDB01邮箱数据库的所有邮件,监控邮箱为用户"王淑江"的邮箱. 1.EMS全局监控设置 使用PowerShell完成操作:"王淑江"监控T ...
- promise错误处理的三种方法
promise碰到then,也就是resolve或者reject的时候是异步的,所以try...catch对它是没有用的 1.then(resolve,reject); then方法中第二个回调,是 ...
- Promise 错误处理
Promise 是一个异步返回单个结果的函数或方法 不使用 `catch()` 时,在 `success handler` 里的错误无法被捕捉到 使用 `catch()` 时,在 `succe ...
- InnoDB的后台线程(IO线程,master线程,锁监控线程,错误监控线程)和内存(缓冲池,重做日志缓冲池,额外内存池)
InnoDB有多个内存块,你可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构. 缓存磁盘上的数据,方便快速地读取,并且在对磁盘文件的数据进行修改之前 ...
- 分享知识-快乐自己:自定义struts2类型转换的全局与局部错误信息。
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面.我们可以通过配置文件来替换这条由struts2自动生成的 ...
- .net mvc 运行监控和错误捕捉
方法类 /// <summary> /// 运行监控类 /// </summary> [AttributeUsage(AttributeTargets.Class | Attr ...
- .net(全局文件,错误页,静态页,IIS配置及防黑)
添加全局应用程序类. <%@ Application Language="C#" %> <script runat="server"> ...
- wpf 全局异常捕捉+错误日志记录+自动创建桌面图标
/// /// 创建桌面图标 /// public static void CreateShortcutOnDesktop(string LnkName) { String shortcutPath ...
随机推荐
- 杂:python_windows标准输出带颜色
import ctypes handle = ctypes.windll.kernel32.GetStdHandle(-11) # -11 for output -10 for input - ...
- env_config
import sys import os root_path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__f ...
- python随机数模拟
`#随机数 import random red = range(1,36,1) red_target_list=[] i=1 while i< 6: red_ran_index=random.r ...
- Linux装cudnn
https://stackoverflow.com/questions/66977227/could-not-load-dynamic-library-libcudnn-so-8-when-runni ...
- JAVA学习笔记-06
多态:可以理解为事物存在的多种体现形态 1.多态的基本体现 父类的引用指向了自己的子类对象 父类的引用也可以接收自己的子类对象 2.多态的前提 必须是类与类之间有关系,要么继承,要么实现 通常还有一个 ...
- linux内核中根据函数指针追踪调用函数名
2 linux内核中根据函数指针追踪调用函数名 linux内核的printks可以输出函数指针对应的函数名. printk("func: %pF at address: %p\n" ...
- Redis实战(二)Redis 的 RDB 配置和数据恢复
RDB 配置解释 在 redis.conf 文件中,默认有 RDB 持久化配置: save 900 1 save 300 10 save 60 10000复制复制失败复制成功 解释: 这些配置称为检查 ...
- EXCEL函数总结
------------------截取"号"之前的字符 =MID(A45,1,FIND("号",A45,1)-1)
- Netty Reactor模型
1.netty抽象出两个线程池:BossGroup负责监听和建立连接 :WorkerGroup 负责网络IO的读写 2.BossGroup 和 WorkerGroup 类型都是NioEventLoop ...
- 公式b-(a-b)