捕獲promise異常,不能用onerror
阿新 • • 發佈:2018-11-07
最近在用axios在vue裡做非同步請求,遇到了難題,我在axios裡丟擲異常後,想在一個地方統一捕獲異常,不想用catch方法,因為用catch的話,每個方法後面都要加,而我想要做的是把出現的異常都用彈窗的形式彈出來。
於是開始用
window.onerror = function(){}
但是出錯了,這個怎麼嘗試都無法捕獲promise的異常。
經過一番學習研究,找到了合適的方法,監聽unhandledrejection事件,捕獲未處理的Promise錯誤,方法如下:
window.addEventListener('unhandledrejection',function (event ) {
console.log(event.reason); // 列印丟擲的異常
})
果斷成功了。
下面附上一個完整的例子複製程式碼即可嘗試:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>promise捕獲異常</title>
</head>
<body>
<script>
function aaa (flag) {
return new Promise(function (resolve, reject) {
if (flag) {
resolve("Hello!!!!!!");
} else {
reject("bye bye!!!!!!");
// throw new Error('123')
}
});
}
aaa(false).then(function (message) {
alert(message);
});
window.addEventListener('unhandledrejection' ,function (event) {
console.log('捕獲異常成功了,好開心啊!!!!')
console.log(event.reason);
})
</script>
</body>
</html>