小程序采坑记

415 阅读1分钟

小程序登录功能

本地存储用户信息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