捕获promise异常,不能用onerror

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

猜你喜欢

转载自blog.csdn.net/u014196765/article/details/78293220