- 业务需求是,维护登录态的代码写在app.js里的,获取到登录态后保存到globaldata里,子页面的请求接口都需要携带登录态,直接拿globaldata里的登录态就可以。
- 遇到的问题是,经常子页面比如index页面里的代码在app.js执行完毕前就执行,就拿不到globaldata里的登录态。
- 我的思路是能不能把app.js里维护登录态的代码用Promise改写一下,然后把Promise实例放到globaldata里,子页面比如index页面取globaldata的Promise实例等待状态变为resolve时就可以拿到登录态然后再请求接口了。
下面是我回调函数方式维护登录态的大体流程:请教大佬怎么改写呢?
wx.getStorage({ // Storage里取登录态
key: 'loginState',
success(res) { // 登录态存在
wx.checkSession({
success() {
//session_key 未过期
},
fail() {
// session_key 已经失效,需要重新执行登录流程
wx.login({
success(val){
wx.request({
url: 'https://test.com/onLogin',
data: {
code: val.code
},
success(data){
this.globalData.uid = data.uid; // 将后端返回的登录态uid保存到globalData方便子页面使用
}
})
}
}) //重新登录
}
})
},
fail() {
wx.login() //登录态不存在,重新登录
}
})
当然是可以的,不过不一定非要用
globalData
,实际上整个 app 实例都可以访问,而且是个普通对象,所以你可以把这个 Promise 直接放在 app 的任何位置,比如:写完答案我又看了眼你的问题,你知道怎么写 Promise 吧?