看官方的例子,获取openid是在app.js的onLaunch里,通过wx.login得到code,然后用开发者服务器进行请求,最终换取到openid,然后把openid保存在globalData.openid里面,方便其他页面直接使用。大概的代码就像下面,网上一般也都这么写的。
但仔细一想,因为换取openid的处理是异步处理,所以很可能其他页面里使用globalData.openid时,openid还没有从服务器返回呢,也就是此时它的值是空。
可是为什么网上都是如下的写法呢,微信官方的例子也是建议在app.js的onLaunch里面的wx.login中用code换取openid,感觉挺奇怪的,大家为什么都不怎么考虑异步问题呢?还是我哪里理解错了。谢谢!
// 登录
wx.login({
success: res => {
// ------ 获取凭证 ------
var code = res.code;
if (code) {
// console.log('获取用户登录凭证:' + code);
// ------ 发送凭证 ------
wx.request({
url: '后台通过获取前端传的code返回openid的接口地址',
data: { code: code },
method: 'POST',
header: {
'content-type': 'application/json'
},
success: function (res) {
if (res.statusCode == 200) {
// console.log("获取到的openid为:" + res.data)
that.globalData.openid = res.data
wx.setStorageSync('openid', res.data)
} else {
console.log(res.errMsg)
}
},
})
} else {
console.log('获取用户登录失败:' + res.errMsg);
}
}
})
用Promise处理就好了
https://developers.weixin.qq.com/community/develop/article/doc/000a0aed14c3285bea79e67ee56813