问题:小程序的login()登录请求一般在app.js的onLaunch里面发起,如果在其他页面onLoad里调用登录请求返回的数据,会取不到数据。因为请求是异步的,在onLoad里,login()整个请求没有处理结束...
解决方案:
//app.js
App({
onLaunch: function () {
wx.login({
success: function (res) {
if (res.code) {
console.log(res)
wx.request({
url: 'helloWorld.php', //仅为示例,并非真实的接口地址
data: {},
success: function (res) {
this.globalData.loginId = res.loginId;
//由于这里是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.loginIdCallback) {
this.loginIdCallback(loginId);
}
}
})
} else {
console.log('获取code失败!')
}
},
})
},
//定义回调函数
loginIdCallback() {
},
globalData: {
loginId: ''
}
})
//index.js
//获取应用实例
const app = getApp()
Page({
init() {
},
onLoad: function () {
//判断是用户是否绑定了
if (app.globalData.loginId && app.globalData.loginId != '') {
this.init()
} else {
app.loginIdCallback = loginId => {
this.init()
}
}
}
})