在小程序开发中,通常是在app.js中调用微信的登陆接口获取 open_id,这个过程是异步的;而咱们在page的onload中常常须要使用 open_id 做为请求参数去请求其余的业务接口或执行某些方法。这样很容易出现的问题就是app.js中的open_id尚未返回,pages中的方法就已经执行完了。小程序
在globalData中定义一个标志位,标识app.js中的请求是否完成;在page中根据这个标志位肯定是否执行,若是app.js中请求完成,则直接请求便可;不然,定义一个全局回调函数去执行相同的代码,并在app.js中调用。感受本身没有描述清楚,看段代码吧~微信
app.jssession
App({
onLaunch: function () {
// login
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url: `request url`,
data: {
code: res.code,
},
success: res => {
// your code
this.globalData.isEnd = true;
if (this.callback) {
this.callback();
}
}
})
}
})
},
globalData: {
isEnd: false,
}
})
复制代码
Pageapp
const app = getApp();
Page({
onLoad: function(options) {
if (app.globalData.isEnd) {
// 执行你的方法
} else {
app.callback = () => {
// 执行你的方法,跟上面的代码一致
}
}
}
})
复制代码
未完待续~异步