最近在用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>