求问,怎么才能先执行app.js,执行完了,才执行page里的js呢
我想在app.js里用接口获取一个参数,用到page里面,显示在页面上,但是每次页面加载完了,app.js才获取到参数,这怎么办呢??
页面onLoad时,数据接口还没执行完,没有数据,获取不到
我想在app.js里用接口获取一个参数,用到page里面,显示在页面上,但是每次页面加载完了,app.js才获取到参数,这怎么办呢??
页面onLoad时,数据接口还没执行完,没有数据,获取不到
没必要用定时器,可以加一个回调函数
例如:
if (app.xxx) {//判断有没有你要的 没有说明还没返回或者是失败了 //操作略 } else { //这个是时候我们在app的config里定义一个函数 给请求成功后调用 app.callback = () => { //操作略 这个和上面的操作是一样的 }; } |
app请求返回成功里这样写
if (this.callback) { //这个函数名字和你定义的一样即可 this.callback() //执行定义的回调函数} |
希望你能够看明白,
小程序的新建范例里面就有回调函数的用法:
onLoad: function () { console.log('index page on load log:' + Date()); if (app.globalData.userInfo) { this.setData({ userInfo: app.globalData.userInfo, hasUserInfo: true }) } else if (this.data.canIUse){ // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 app.userInfoReadyCallback = res => { this.setData({ userInfo: res.userInfo, hasUserInfo: true }) } |
这种问题一般都是需要一些app开始时候从网络请求的数据来更新页面内容,但页面渲染提前了。可以专门约定一个每个page都有的page.render()函数来渲染页面,如果发现需要的数据还没有ready干脆什么都不做,由app.onLoad在网络请求成功之后直接getCurrentPages,调用page.render就完事了。