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;};   // 这样可以彻底忽略所有错误

 

转载于:https://www.cnblogs.com/xjy20170907/p/11431121.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值