zoukankan      html  css  js  c++  java
  • 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;};   // 这样可以彻底忽略所有错误

  • 相关阅读:
    SQL逻辑查询语句执行顺序
    数据库索引的实现原理
    JAVAMail邮件服务器
    TCP/IP基础
    Java IO流学习总结
    [Lydsy1806月赛] 超速摄像头
    CodeForces
    SCU
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/11431121.html
Copyright © 2011-2022 走看看