导读

开发中,我们不可避免地会遇到捕获错误处理、做一些日志上报,埋点的功能,以下是一些常见的错误捕获方式。

**# **对setTimeout错误捕获

由于setTimeout的回调是异步任务,以下代码无法捕获执行错误

1
2
3
4
5
6
7
try {
   setTimeout(() => {
       throw new Error('定时器错误')
  },10)
} catch (err) {
   console.log("捕获的",err)
}

必须在setTimeout的回调里使用try...catch...语句包裹

1
2
3
4
5
6
7
setTimeout(() => {
 try {
   throw new Error("定时器错误");
} catch (err) {
   console.log("捕获错误", err);
}
}, 10);

Promise的错误捕获

对于promise,可以这几使用.catch进行捕获

1
2
3
4
const p = Promise.rejected()
p.catch(err=>{
 console.log("捕获的错误",err)
})

全局错误监听

也可以使用window.onerror处理全局未捕获的错误

1
2
3
4
5
6
7
8
9
10
window.onerror = function (msg, source, lineno, colno, error) {
       console.log("Window error:", {
         message: msg,
         source: source,
         lineNumber: lineno,
         columnNumber: colno,
         error: error,
      });
       return true; // Prevents the error from propagating
    };

或者

1
2
3
window.addEventListener("error", (e) => {
       console.log("e", e);
    });