由于之前自学的时候,这部分获取openid的代码设计不合理,经过学习优化,这里来给出一种正确的打开方式,代码如下:
app.js:
App({
globalData: {
openid: null,
},
onLaunch() {
wx.cloud.init({
env: 'xxxxxxxxx', //这里替换成自己的云开发环境id
traceUser: true,
})
this.getOpenid()
},
// 获取用户openid
getOpenid: function () {
var app = this;
var openidStor = wx.getStorageSync('openid');
if (openidStor) {
console.log('本地获取openid成功:', openidStor);
app.globalData.openid = openidStor;
} else {
wx.cloud.callFunction({
name: 'getOpenid',
success(res) {
console.log('云函数获取openid成功:', res.result)
var openid = res.result.openid;
wx.setStorageSync('openid', openid)
app.globalData.openid = openid;
},
fail(res) {
console.log('云函数获取失败', res)
}
})
}
},
})
这段代码比较短,能看懂的兄弟们直接拿走就好,有些疑惑的话,那么我来解释一下,这段代码的实现逻辑:先在本地缓存里获取openid,若本地缓存里没有openid,那么就调用getOpenid的云函数来获取openid。
注意点:
1. 需要把云开发的环境id换成自己的即把env: 'xxxxxxxxx', 这段代码修改一下
2.var app = this;,是为了确保在接下来的回调函数里还是可以调用到原来的上下文
3.var openidStor = wx.getStorageSync('openid');这段代码是从缓存里获取到openid,拿到他的前提是 wx.setStorageSync('openid', openid),通过云函数已经把openid获取过并且保存到了缓存里
4. app.globalData.openid = openid;把openid存入全局对象,方便在其他页面里直接调用
5.如果有不会写getOpenid的伙伴,可以找找我的前几篇文章
解释完毕,希望这些内容能对你有所帮助。如果你也觉得这个内容有用的话,可以留下点赞和收藏呦,方便下次查阅浏览。