如果覺(jué)得還有點(diǎn)用,請(qǐng)您給我一個(gè)贊!您的贊是我堅(jiān)持下去的動(dòng)力
常用的3種異常捕獲方式
1、listener監(jiān)聽(tīng)
window.addEventListener('error',(e)=>{
})
window.addEventListener('error',(e)=>{
//可以捕獲<img>標(biāo)簽資源加載失敗
},true)
特點(diǎn):
- 利用冒泡階段的捕獲,可以捕獲到
<img>等標(biāo)簽的資源加載失敗的onerror事件 - 捕獲順序優(yōu)先級(jí)高于
window.onerror,也就是異常會(huì)先進(jìn)入listener內(nèi),然后再進(jìn)入到window.onerror - 如果在處理完事件,不想window.onerror或其他listener捕獲的話,使用 stopImmediatePropagation()來(lái)攔截
2、全局onerror
window.onerror=function(e){
}
3、try-catch
try{
return 1;
}catch(e){
return 2;
}finally{
return 3;
}
return 4;
特點(diǎn):
- 在
try{}內(nèi)的異常會(huì)被catch{}部分捕獲,不會(huì)繼續(xù)被window.onerror和listener捕獲 - 在
finally{}內(nèi)的異常會(huì)直接被Listern和window.onerror捕獲,不會(huì)被自己的catch{}捕獲 - 在
catch{}塊內(nèi)產(chǎn)生新的異常,將不會(huì)被任何東西捕獲 - 關(guān)于這幾個(gè)
return:- 當(dāng)有
finally{}的時(shí)候,如果finally{}內(nèi)沒(méi)有產(chǎn)生新的異常則return 3,如果產(chǎn)生了異常則不會(huì)return而是中斷了. - 當(dāng)沒(méi)有
finally{}的時(shí)候,如果進(jìn)入了catch{}則return 2,不然則return 1 -
return 4不會(huì)被執(zhí)行到
- 當(dāng)有
4、監(jiān)聽(tīng)unhandledrejection
window.addEventListener('unhandledrejection',(e)=>{
})
特點(diǎn):
- 用于監(jiān)聽(tīng)Promise內(nèi)產(chǎn)生未被catch的異常
- Promise在catch自己的異常中產(chǎn)生的新異常也將被捕獲
如果覺(jué)得還有點(diǎn)用,請(qǐng)您給我一個(gè)贊!您的贊是我堅(jiān)持下去的動(dòng)力