Javascript异步操作的异常处理

try {
    throw new Error(3)
} catch (e) {
    console.log(e)
}

try {
    setTimeout(function () {
        throw new Error(5)
    }, 100)
} catch (e) {
     console.log(e)
}

以上代码中,在浏览器是分别输出Error: 3(正常打印出错误实例,未报错)和 Uncaught Error: 5(一个未捕获错误):

原因:以上例子中第二个try catch捕获不到错误,因为try catch是同步的,执行到setTimeout时把它放到了任务队列里(setTimeout是异步的)没有立即执行setTimeout就往下走了,同步任务执行完再回头把任务队列里的setTimeout回调函数拿出来执行就报错了。

要捕获到异常,必须在throw new Error的直接外层用try catch包起来才行:

    setTimeout(()=>{
        try{
            throw new Error('fail');
        }catch (e){
            console.log(e);
        }
    },1000);

 promise的异常处理可以用自带的catch回调函数。

window.onerror = function(err) { return true;};   // 这样可以彻底忽略所有错误

猜你喜欢

转载自www.cnblogs.com/xjy20170907/p/11431121.html