如何在加载期间收到错误时继续javascript执行

时间:2010-09-10 13:51:32

标签: javascript jquery error-handling

不确定说出问题的最佳方式,但假设您正在使用jQuery来设置各种类似的东西:

<script>

    function doSecond(){
        alert("Hi");
    }

    function dofirst(){
        var x = asdasd;
    }

    $(dofirst);
    $(doSecond);

</script>

因此,想象一下dofirst和dosecond是完全独立的。如果dofirst抛出一个异常,当然它会发生异常,那么doSecond永远不会触发。我理解为什么会发生这种情况,但我想知道是否有办法解决这个问题,而不必包装每个类型的jQuery处理程序,我想在其中设置尝试抓住。例如,我宁愿不这样做:

try{
 $(doFirst);
}
catch{
 //maybe log here?
}

try{
 $(doSecond);
}
catch{
 //maybe log here?
}

现在,如果你想知道我为什么要这样做?好吧,以你现在正在查看的页面上的代码为例:

<script type="text/javascript">
        $(function() {
            $('#title').focus(function() { $('#how-to-tag').hide(); $('#how-to-format').hide(); $('#how-to-title').fadeIn('slow'); });
            $('#wmd-input').focus(function() { $('#how-to-tag').hide(); $('#how-to-format').fadeIn('slow'); $('#how-to-title').hide(); });
            $('#tagnames').focus(function() { $('#how-to-tag').fadeIn('slow'); $('#how-to-format').hide(); $('#how-to-title').hide(); });
        });
    </script>

点击它们时某些dom元素是否真的真的必须淡出?不。但是如果你在那个函数中犯了错误,那么很可能你真正需要运行的其他javascript可能永远不会得到设置。

2 个答案:

答案 0 :(得分:1)

确保事物彼此独立运行的几种方法:

  • 正如你所说,尝试/捕捉每个

  • 在setTimeout中调用每个(或 无论jQuery语法糖 是为了那个)

  • 分成不同的<script>

答案 1 :(得分:1)

显然,不会抛出异常是一个荒谬的建议。特别是在许多浏览器/版本/服务器/服务器的世界中。网站JS有很多方法可以打破它,很难找到任何大小的网站,不会抛出某种类型的例外(在控制台检查中)。

您可以创建一个简单的包装器(或扩展现有的jQuery方法)

function safeonload(fn){
   $(function(){
     try{
       fn();
     }catch{
        //log?
     }
   });
 }

 safeonload(doFirst);
 safeonload(doSecond);