小程序获取用户信息无法得到问题

本文介绍了在小程序开发中遇到用户信息无法获取的问题,分析了原因在于JS异步执行导致请求未完成就进行赋值。作者通过学习回调函数,解决了微信小程序wx.login()获取登录信息时可能出现的undefined情况,强调了解决此类问题的关键在于正确使用回调函数,并提倡开发者深入阅读官方文档以解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小程序获取用户信息无法得到问题

1.前言

因为小程序是由js代码编写的,我js学得不是特别的好,所以,刚开始以为js跟java一行,一行一行的执行,后面才发现,完全不是,所以有时候,我们在获取用户信息和openId的时候,要向后台发送请求,所以有时有可能请求还没有返回数据,小程序这边已经赋值了,只能得到一个undifine,很桑心,后来js代码看多了之后,才发现有一种处理这个问题的好方法,回调,当请求得到返回信息之后,再回调,就可以得到数据了
其实微信官方文档也说明了添加一个回调函数,但是我看着这个回调函数也不知道怎么用啊,上网搜索也都是抄袭微信文档,没点新意

2.在app.js中获取用户信息

  onLaunch: function () {
    // 展示本地存储能力

    var that = this ;
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    
    // 登录
    wx.login({
      
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        var code = res.code;
        var user =null;
        // wechatUtil
        wechatUtil.req("/user/login", { "code": code }, function (res) {
          console.log("获取openId成功");
          console.log(res);
          if (res.resultCode == 200) {
            that.globalData.user = res.resultContent;
            user = res.resultContent;
            // this.setData({
            //   user: res.resultContent
            // });
            // that.data.user = res.resultContent;
          } else {
            console.log("获取openId失败,msg:" + res);
          }
		
		// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
        // 所以此处加入 callback 以防止这种情况
          if (that.userCallback) {
            that.userCallback(res)
          }
        });
      }
    })
  },

3.在获取openId的地方添加对回调的调用

onLoad: function () {
    var that = this;
    
    if (app.globalData.user && !JSON.stringify(app.globalData.user)){
      that.setData({
        user: app.globalData.user
      })
    }else{
      app.userCallback = res =>{
        console.log("----------------------------res="+res);
        if(res != null){
          this.setData({
            user: res.resultContent
          })
        }
      }
    }
 }

4.后言

小程序的坑确实挺多,但是你如果仔细阅读文档,都能解决,所以还是多读文档吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值