避雷!小程序全局userInfo值为空的问题

1.发现问题

最近在做一个小程序的登录页面的时候,要验证用户是否已经授权过小程序获得用户信息,所以在app.js里面的onLaunch函数(小程序初始化执行)用了api里面的getSetting方法,代码如下

//app.js
 onLaunch(){
    wx.getSetting({
      // 获取用户的当前设置,返回值中只会出现小程序已经向用户请求过的权限(用户同意被请求的)
      success:res=>{
        // .xxx和['xxx']取值的区别
        res.authSetting['scope.userInfo']
        ?
      (console.log('已授权'),
      // 把授权过的信息保存到全局
      wx.getUserInfo({
        success:data=>{
          this.globalData.userInfo=data.userInfo
        }
      })
      )
      :
      console.log('用户未授权');
      }
    })
      },

然后在globalData里面初始化userInfo

//app.js
globalData: {
    userInfo:'无'
  },

好了接下来我们到登录页面去写一个授权的点击按钮

//login.wxml
<button open-type="getUserInfo" bindgetuserinfo="getuserinfo" wx:if="{{isShow}}">点击授权</button>
<view class="userimg"><image src="{{userImg}}"></image></view>
<view class="username">{{userName}}</view>
//login.js
const app=getApp()
const appG=app.globalData
console.log(app.globalData.userInfo);
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userImg:'',
    userName:'',
    isShow:true
  },
getUserInfo(e){
  const userInfo=e.detail.userInfo
  this.setData({
    userImg:userInfo.avatarUrl,
    userName:userInfo.nickName
  })
},

好的接下来我们来点击这个按钮让它进行授权
在这里插入图片描述
点击允许
在这里插入图片描述
获取成功
在这里插入图片描述

2.问题关键

好的此时小程序的数据里面已经保存了我们同意授权的信息,我们再次编译页面来获取userInfo的值并把它保存到全局变量中(app.js的onLaunch中操作),并在login.js中输出它,需要格外注意的是我们此时编译的页面是login.wxml在这里插入图片描述
看结果
在这里插入图片描述输出的值是无,看到这里你以为是用户授权出问题了吗,来我们展开这个object
在这里插入图片描述
就tm离谱,两个一样的key不一样的value,让我们输出一下userInfo,得到的结果是无,也就是说真正的userInfo获取不到

3.问题出现的原因

经过一番查阅,发现是onLaunch的执行比本页面的onLoad函数(整个该页面的js)执行要慢,所以会出现上述情况,假设我现在编译的页面是主界面index.wxml,那我在我从编译进入index再到进入login页面的过程中那么函数执行的顺序就是index onLoad—>onLaunch—>login onLoad

4.问题解决的办法

如果获取userInfo的不是小程序的主页面,那么直接换成其他页面的编译,再从其他页面进来这个页面就可以获取到数据,如果是主页获取userInfo,那么就使用promise异步解决这个问题,教程网上搜得到的,此处不再赘述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Feng Wuqian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值