javascript - js同步异步的疑问
PHP中文网
PHP中文网 2017-04-10 15:06:43
[JavaScript讨论组]

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

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
黄舟

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

巴扎黑

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

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

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

黄舟

把你的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);
}
黄舟

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

巴扎黑

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

迷茫

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号