JS 异常捕获方法

304 阅读1分钟

一、错误类型:

1、语法错误:`SyntaxError`

2、引用错误:`Uncaught ReferenceError`

3、范围错误:`RangeError`

4、类型错误:`TypeError`

5URL错误:`URLError`

6、promise/async/await错误

7、js运行错误

8、资源加载错误

二、怎么捕获

1. async/await的错误可以通过 `try catch` 进行捕获

2. window.addEventListener('error')可以捕获资源加载错误
    
    为避免重复上报js运行时错误,此时只有
    event.srcElement inatanceof HTMLScriptElement或
    event.srcElement inatanceof HTMLLinkElement或
    event.srcElement inatanceof HTMLImageElement 时才进行数据采集。

3. window.onerror 可以捕获大部分的js运行错误,但是资源加载错误不行

4. promise的错误,可以使用 `.catch` 来捕获

5. window.addEventListener('unhandledrejection')捕获未处理的promise reject错误

三、try catch 为啥不能捕获promise异常

try-catch 主要用于捕获异常,注意,这里的异常,是指同步函数的异常,
如果 try 里面的异步方法出现了异常,此时catch 是无法捕获到异常的。

原因是因为:当异步函数抛出异常时,对于宏任务而言,执行函数时已经将该函数推入栈,
此时并不在 try-catch 所在的栈,所以 try-catch 并不能捕获到错误。
对于微任务而言,比如 promise,promise 的构造函数的异常只能被自带的 reject 也就是.catch 函数捕获到