前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让javascript中的异步请求同步起来

让javascript中的异步请求同步起来

作者头像
用户1214695
发布2018-02-07 15:41:50
1.3K0
发布2018-02-07 15:41:50
举报
文章被收录于专栏:三木的博客三木的博客

在页面加载的时候,javascript通常会从服务器去获取一些数据,拿到数据后再渲染页面。如果用同步请求一个一个去拿这些数据,加载会很慢。但如果使用异步请求,后面的渲染操作会在数据返回之前就把页面给渲染了。

google了一下好像木有合适的解决办法, 于是我尝试用一个死循环挡在渲染页面之前,拿到数据后再跳出死循环。类似于这样的:

代码语言:javascript
复制
overview.showLoading();
instances.get_cluster(true);
users.get_users(true);
databases.get_databases(true);

for(;;) {
    if(ctrl.cluster && ctrl.databases && ctrl.users) {
        break;
    }
    setTimeout('', 500);
}

instances.show();
databases.show();
users.show();
overview.show();
overview.hideLoading();

get_cluster, get_databases, get_users会发起异步请求,请求成功后会把数据写到ctrl中去。看起来不错,可是执行起来浏览器会建议用户杀掉script,因为发现了死循环。木有办法,稍微变通一下,只能让死循环活半个小时,如果加载页面需要半个小时的话,你的网站可以歇菜了。于是改成下面的代码:

代码语言:javascript
复制
overview.showLoading();
instances.get_cluster(true);
users.get_users(true);
databases.get_databases(true);

for(var i =0; i < 3600; i++) {
    if(ctrl.cluster && ctrl.databases && ctrl.users) {
        break;
    }
    setTimeout('', 500);
}

instances.show();
databases.show();
users.show();
overview.show();
overview.hideLoading();

世界安静了,同步时不停转的loading也很快就消失了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档