小程序登录功能
本地存储用户信息userInfo却没有openid信息
先上代码:
getUserInfo: function(e) {
// 获取的用户信息 e.detail.userInfo
wx.cloud.callFunction({ name: 'enter' }).then(res=>{
// 访问云函数enter得到用户openid res.result.openid e.detail.userInfo.OPENID = res.result.OPENID })
this.setData({ userInfo: e.detail.userInfo }) wx.setStorageSync('userInfo', e.detail.userInfo) }先说下思路,本来我想通过小程序button组件的open-type="getUserInfo"开放功能,获取本用户信息(注意这里获取的用户信息是没有openid等敏感信息的),然后等过访问云函数获取本用户的openid,然后我想通过上面的代码,将用户信息存储到本地缓存,然后发现本地缓存的userInfo没有OPENID,然后的第二天,起床临时想起一点东西,然后在下面做了相应的修改
getUserInfo: function(e) { wx.cloud.callFunction({ name: 'enter' }).then(res=>{ e.detail.userInfo.OPENID = res.result.OPENID this.setData({ userInfo: e.detail.userInfo }) console.log(this.data.userInfo.OPENID) wx.setStorageSync('userInfo', e.detail.userInfo) }) }对比一下代码,大佬们就会发现,本问题的关键处在于 同步/异步 关于同步/异步不了解的可以去度娘了解一下
第一个代码,是先访问enter云函数,然后异步返回openid,但是,enter云函数还未返回数据的时候,下面setData和setStorageSync就执行了,也就是说userInfo还没有保存到openid,就已经讲userInfo数据保存到本地缓存了!
第二个代码,是先访问enter函数,然后异步返回openid,enter云函数成功返回数据后才执行setData和setStorageSync