初次开发小程序,一开始以为是onlaunch执行完了再onload,实际并不是,然后就导致需要的条件判断一直是false,先上大概的代码段:
app.js
onLaunch: function () {
//登录
this.userLogin()
},
userLogin: function () {
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (res.code){
wx.request({
url: "login.php",
data: {
code : res.code
},
method : "POST",
header : {
"content-type": "application/x-www-form-urlencoded"
},
success: function (res) {
getApp().globalData.hasAuthorize = true;
},
fail: function () {
console.log('服务器请求失败!')
},
})
} else {
console.log('获取用户信息失败!' + res.errMsg)
}
}
})
},
globalData: {
userInfo: null,
hasAuthorize: false
}
index.js
onLoad: function () {
//在页面展示之后先获取一次数据
this.setData({
hasAuthorize: app.globalData.hasAuthorize
})
},
我的问题:
很多时候打开小程序时,还没onLaunch完,index.js的onLoad已经执行了,导致hasAuthorize每次拿到的都是app.globalData.hasAuthorize的初始值(false)
有什么办法能等onLaunch完在onLoad吗?新手求指教,谢谢。
你所遇到的问题并不是
onLoad
在onLaunch
之前执行,而是在onLaunch
中的异步操作回调触发晚于onLoad
(这是必然的)。所以有一个很简单的解决方案:
不要直接在
onLoad
中获取app.globalData.hasAuthorize
,而是暴露一个函数,传入回调,在回调中设置hasAuthorize
。类似这样的代码: