js同步异步的疑问

现在一个页面上有9个div,每一个div都是需要对应一个load_div_id方法,然后页面加载的时候直接在$(function() {
load_div_1();
load_div_2();
load_div_3();
...
});

这样导致一个load方法出错了,后面就不执行,页面卡死的问题。这种有什么好的解决方法吗?

阅读 3.9k
6 个回答

我觉得比较好的处理方式,是通过try..catch来捕获你的异常并且处理,这样就不会影响后续的方法的调用。

js是解释执行的,你这样写在其中一个出现错误的时候,下面的代码就停止解释了

有一个问题是,为什么你要让其中一个报错?

如果是因为特殊原因需要这个的报错,可以try...catch对错误进行处理

把你的load写成异步的,结果使用callback来处理。
举个例子:

function load( parent, div, cb ) {
     //异步执行,其实jquery自己的$.load就是这样的
     setTimeout( function() {
         try{
             var fine = $(parent).append($(div));
             cb(fine);
         } catch (e) {
             cb(e);
         }
     },1);
}

//结果回调函数
function result_handler( result ) {
    $('body').append('<p>' + result + '</p>');
}

//你的业务代码,这样怎么出错都不会死掉,除非语法问题
for(var i = 0; i< 10; i++ ){
    load('body', '<div>'+i+'</div>', result_handler);
}

因为一旦当前上下文有语法错误,代码就不往下执行了。

因为单线程执行的关系,没有try/catch的话,直接throw异常给解释器,解释器中断执行
解决方法是:为什么会执行出错~~~

肯定要知道为啥错了,找到错误改掉它。严格意义上说是不能出现这样的错误的,因为出现这样的错误就意味着代码写的有问题,或者逻辑不够严格。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题