该文章解决方案源于网络,我进行了微加工。
该文章适合解决:app.js获取和了openid后,重新编译小程序,index.js在获取openid之前就已经加载成功,导致index.js无法获取到app.js中的openid问题。
解决方法有两步:
第一步、添加一个引导页。
第二步、使用Promise
代码如下:
app.js中添加方法如下:
getToken() {
return new Promise((resolve, reject) => {
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (res.code) {
//发送res.code 到后台
wx.request({
url: this.globalApi.checkUser,
method: 'POST',
data: {
code: res.code
},
success(res) {
//成功返回数据后,将token值存储到localStorage中
wx.setStorage({
key: 'yerlLocalToken',
data: res.data.token
});
var resArg = res.data.token;
resolve(resArg)
},
fail() {
reject();
}
})
}
}
})
})
}
加了个引导页load.js如下
onLoad: function (options) {
app.getToken().then(function (resArg) {
wx.redirectTo({
url: '/pages/index/index',
})
})
}
这里和上页的resArg可以删除。
promise执行成功后,页面跳转到首页
index.js
const app = getApp()
Page({
data: {
},
onLoad() {
console.log(wx.getStorageSync('yerlLocalToken'))
}
})
显示结果如下:
正常获取到token。
如果按照这种方法解决该问题,请记得将app.json中的页面顺序调整为load页面首位,如下:
{
"pages": [
"pages/load/load",
"pages/index/index",
"pages/logs/logs"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "wechat",
"navigationBarTextStyle": "black"
}
}