不知道前端代码哪里报错了?我有七种方式去监控它!

开发 前端
try...catch 是捕获错误的重要方式,但是它只能捕获运行报错、同步报错,捕获不了 编译报错、异步报错。

我之前写了一个前端监控的库 sunshine-track,很多人都来问我说,错误监控 这个环节的思路是什么,要怎么在前端项目中做错误监控?

链接:https://github.com/sanxin-lin/sunshine-track

图片图片

错误类型

我们先来说说前端中的错误类型有哪一些

常见错误类型

1、SyntaxError

SyntaxError 是解析时发生语法错误,这个错误是捕获不到的,因为它是发生在构建阶段,而不是运行阶段

图片图片

图片图片

2、TypeError

TypeError 指的是:值不是所期待的类型

图片图片

图片图片

3、ReferenceError

ReferenceError 指的是:引用未声明的变量

图片图片

图片图片

4、RangeError

RangeError 指的是:当一个值不在其所允许的范围或者集合中,通常会在无限递归时报错

图片图片

图片图片

网络错误

1、ResourceError

ResourceError 指的是:资源加载错误

图片图片

2、请求错误

图片图片

错误监听

接下来讲一下我们应该如何监听这些错误

try...catch

try...catch 是捕获错误的重要方式,但是它只能捕获运行报错、同步报错,捕获不了 编译报错、异步报错

图片图片

window.onerror

代码报错时,会触发 window.onerror 回调函数,这个回调函数接受了以下几个参数

图片图片

但是 window.onerror 也是有缺点的,捕获不了 编译报错、资源报错

图片图片

window.addEventListener('error')

由于 冒泡机制 ,当资源报错 时触发 error,会冒泡到 window 上,所以 window.addEventListener('error') 可以捕获到 资源报错,但是它也只能捕获 script、css、img 这些标签加载资源的报错,而捕获不了 new Image 这种资源加载报错,且捕获不了 网络错误

图片图片

Promise catch

当 Promise 状态变成 rejected 时,可以使用 catch 方法去捕获

图片图片

async/await

try...catch 虽然捕获不了异步错误,但是我们知道 async/await 是用同步的方式去执行异步

图片图片

window.addEventListener('unhandledrejection')

无论是 Promise、async/await 归根结底都是 Promise异步报错,都可以使用 window.addEventListener('unhandledrejection') 来捕获错误

图片图片

Vue & React

Vue 提供了 Vue.config.errorHandler 这个属性,可传入错误回调,只要是组件里报错了,都会被这个回调函数捕获

图片图片

React 需要写一个错误边界接收组件 ErrorBoundary

图片图片

责任编辑:武晓燕 来源: 前端之神
相关推荐

2022-04-12 09:04:57

前端监控数据采集

2021-07-14 11:25:12

CSSPosition定位

2022-03-28 07:36:14

OAuth2安全服务器

2018-06-10 16:31:12

2022-07-30 10:08:06

MQTT​协议物联网

2017-06-14 16:44:15

JavaScript原型模式对象

2024-12-17 08:33:42

2018-12-06 09:12:58

2010-11-01 10:37:24

唐骏

2020-04-08 10:39:59

前端web技巧

2022-01-19 11:17:50

服务质量 QoS云服务网络流量

2022-07-01 08:00:44

异步编程FutureTask

2020-09-11 08:48:52

Python 3开发代码

2022-12-23 10:55:09

CIO方式团队

2022-03-18 14:33:22

限流算法微服务

2023-03-28 11:40:07

边缘计算云计算

2022-05-18 09:01:31

JavaScriptEvalErrorURIError

2021-06-03 08:05:46

VSCode 代码高亮原理前端

2021-06-27 21:37:27

缓存雪崩穿透

2018-09-02 15:43:56

Python代码编程语言
点赞
收藏

51CTO技术栈公众号