请求全局数据如何和页面同步问题
发布于 5 年前 作者 taomao 5126 次浏览 来自 问答

在app.js的onLaunch中会 去服务端请求一些全局数据,发现client端还没返回响应数据,就开始加载页面!

请问如何做到onLaunch中保证服务端请求回来再加载页面,目前感觉无解!

9 回复

能发个demo或者代码片段吗? 谢谢

局部数据可以等每个请求返回来以后再设置view需要渲染的数据,全局数据就不知道怎么搞了,比如onlaunch的时候去服务器拿全局数据回来,服务端还每没返回,页面就show了,悲剧把,坑啊

可以写一个事件模块,在对应的页面的.js中监听事件,在appLunch的时候发送事件,并将对应的配置带过去。

这个问题我这边也有处理,目前是app那里绑定了一个事件,还有就是全局添加一个是否加载必要的初始数据成功的状态,然后page里就可以监听这个事件,或者判断状态是否成功来这些后续操作,这样就可以保证我app获取必要的数据了

app.$event.on('APP_READY', () => {
    this.loadInit();
});
 
if (app.store.status == 2) {
    this.loadInit();
}

很常见啊:比如一些全局的广告位资源,一些公共的目录,自动登录,全局缓存数据。我自己的场景是:app launch的时候我就去请求基本的配置信息,比如动态域名啊,公共的配置信息啊,自动登录,什么的这再传动的app和传动web里面是很常见的场景啊,有的页面必须等服务端动态跟新完成后才能set data 各种view的属性的,局部数据还好说,大不了多几层then , catch ! ,有的数据只需要加载一次的,就是app启动的时候加载一次就好了,这时候就没招了比如一个经典的场景:用户扫描二维码做进到某个页面某个动作,这个动作要求用户必须先登录,为了用户体验是做成启动app launch的时候自动登录的,这时候登录还没完成,页面已经刷新了,知道用户的操作失败,因为这时候还没登录成功!

其它的场景还有好多:

比如全局的行业分类信息:

加载app的时候去服务端获取的,服务端还没有返回,页面就渲染了,导致页面没有分类信息,没有办法只能在本地放一份缓存的数据

可以先将页面隐藏或者显示 loading 页面,然后拉取数据后再 setData 并显示页面

页面的渲染目前是开发者无法控制的,请再具体描述一下需求场景,为什么一定要拉取数据后才能渲染页面。

局部数据可以这样!在app launch里面拉取的全局数据,是不会去设置setData的,按照你说的做法会永远显示loading效果!

可以看我这个问题,描述的更清楚https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=cc7ac31de03be188ca4c13eb6cf1925b&token=381155229&lang=zh_CN

就是需要满足去服务器取数据回来之后,再渲染页面,这要求是一个原子同步操作! 目前无解!

回到顶部