如果觉得还有点用,请您给我一个赞!您的赞是我坚持下去的动力
常用的3种异常捕获方式
1、listener监听
window.addEventListener('error',(e)=>{
})
window.addEventListener('error',(e)=>{
//可以捕获<img>标签资源加载失败
},true)
特点:
- 利用冒泡阶段的捕获,可以捕获到
<img>
等标签的资源加载失败的onerror事件 - 捕获顺序优先级高于
window.onerror
,也就是异常会先进入listener内,然后再进入到window.onerror
- 如果在处理完事件,不想window.onerror或其他listener捕获的话,使用 stopImmediatePropagation()来拦截
2、全局onerror
window.onerror=function(e){
}
3、try-catch
try{
return 1;
}catch(e){
return 2;
}finally{
return 3;
}
return 4;
特点:
- 在
try{}
内的异常会被catch{}
部分捕获,不会继续被window.onerror
和listener
捕获 - 在
finally{}
内的异常会直接被Listern
和window.onerror
捕获,不会被自己的catch{}
捕获 - 在
catch{}
块内产生新的异常,将不会被任何东西捕获 - 关于这几个
return
:- 当有
finally{}
的时候,如果finally{}
内没有产生新的异常则return 3
,如果产生了异常则不会return而是中断了. - 当没有
finally{}
的时候,如果进入了catch{}
则return 2
,不然则return 1
-
return 4
不会被执行到
- 当有
4、监听unhandledrejection
window.addEventListener('unhandledrejection',(e)=>{
})
特点:
- 用于监听Promise内产生未被catch的异常
- Promise在catch自己的异常中产生的新异常也将被捕获
如果觉得还有点用,请您给我一个赞!您的赞是我坚持下去的动力
网友评论