app.js一般里面都写的wx.login函数。页面里的onload,onshow都写的接口。等数据。
app.js不先执行,onload里面的数据就会因为没有获取到app.js里的东西而报错。
解决方案:写一个回调函数,onload里获取不到东西就一直获取,不执行下一步操作。直到获取到app.js的数据才继续执行。
下面,我把回调函数的关键代码及示例讲解一下。
回调函数代码:
app.js里写
if (that.callback) { //这个函数名字和你定义的一样即可
that.callback() //执行定义的回调函数
}
page页面里写:
if () {
//判断有没有你要的 没有说明还没返回或者是失败了
} else {
//这个是时候我们在app的config里定义一个函数 给请求成功后调用
app.callback = () => {
};
}
示例及讲解:
我写到onload里了。其实就是一个if-else语句。
我这里写的是
if (app.js里的session存在){
就执行保存到data里的操作
}else{
就去app.callback 接着获取,直到获取成功,再执行保存
}
注意:if 和else 里需要执行的代码是一样的。复制就行了。
onLoad: function (options) {
var that = this;
if (app.globalData.session) {//判断有没有你要的 没有说明还没返回或者是失败了
console.log('第一次回调', app.globalData.session);
that.setData({
session: app.globalData.session,
})
} else { //这个是时候我们在app的config里定义一个函数 给请求成功后调用
app.callback = () => {
console.log('再次回调', app.globalData.session);
that.setData({
session: app.globalData.session,
})
};
}
if(that.data.session !=''){
wx.request()//执行接口
}
},
app.js里,把一个 if语句写到 需要执行回调的那句话下面。callback 那个单词是自己命名就可以,但是需要和上面page里名字一致。
.......
that.globalData.session = res.data.data.session
if (that.callback) { //这个函数名字和你定义的一样即可
that.callback() //执行定义的回调函数
}
.....
好了,这样的话,代码执行顺序就变成了,app.js 执行完,onload获取到了数据才会往下继续。
如果有什么不懂,欢迎留言,或者扫码提问。