search

Home  >  Q&A  >  body text

javascript - js同步异步的疑问

现在一个页面上有9个p,每一个p都是需要对应一个load_p_id方法,然后页面加载的时候直接在$(function() {
load_p_1();
load_p_2();
load_p_3();
...
});

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

PHP中文网PHP中文网2901 days ago252

reply all(6)I'll reply

  • 黄舟

    黄舟2017-04-10 15:08:43

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

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:08:43

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

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

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

    reply
    0
  • 黄舟

    黄舟2017-04-10 15:08:43

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

    function load( parent, p, cb ) {
         //异步执行,其实jquery自己的$.load就是这样的
         setTimeout( function() {
             try{
                 var fine = $(parent).append($(p));
                 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', '<p>'+i+'</p>', result_handler);
    }
    

    reply
    0
  • 黄舟

    黄舟2017-04-10 15:08:43

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

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:08:43

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

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:08:43

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

    reply
    0
  • Cancelreply