之前看见一个表情包
“代码报错怎么了,try...catch...盖住不就好了,能运行就行了”
“later...”
"公司倒闭了(吃泡面中...)"

其实try...catch...并不是万能的,这里开始梳理下吧。如有误,请指正。

try...catch...无法捕获promise和setTimeout等异步的函数
但通过await去包装一层,可以捕获promise回调函数内部的报错
但await 去包装setTimeout 却不行
为何呢?后面再慢慢去梳理为何,先搞清如何能捕获。
感觉似乎是try...catch...能捕获“同步函数”(await包装一层后也算同步了)

如果promise外没有包装await关键字,如何捕获异常呢?
unhandledrejection
大概去看了下,这个异常捕获个人觉得不生很好用,感兴趣可以自行查阅资料

setTimeout 在外面包装一层await依然无法捕获,那怎么捕获他呢?
window.onerror事件

window.onerror = function(e) {
   console.log('e---', e)
}
// 它更多参数的语法更倾向前端异常监控的项目
// 但其实也不好用,最好的方式是setTimeout回调函数内部写一个try...catch...

不管是unhandledrejection或window.onerror,看搜索出来的结果,在前端异常监控网站里比较多,比如自研一款前端异常监控上报到服务器

参考文章:
try...catch 使用场景


健儿
79 声望4 粉丝

掌握好原生js。