小程序获取app.js中的全局变量为空

小程序获取app.js中的全局变量为空

最近写小程序的时候,需要获取用户openid,在app.js使用了相关API获取用户信息,然后存到全局变量中,在其他页面使用的时候,发现获取全局变量的时候是空值。后才发现在小程序中,onLaunch 方法和 onLoad 方法是同时执行的,我需要等 onLaunch 方法执行完毕之后在 onLoad 方法中获取网络请求得到的openid,由于网络请求会比较慢,所以 onLoad 方法可能在 onLaunch 方法之前执行了。

这时候可以自定义 Callback 回调函数来解决问题

app.js

App({
  /**
   * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
   */

  globalData: {
    openId:'',
    unionId:'',
  },

  onLaunch: function () {
    var that=this;
      wx.login({
      success(res){
        console.log(res)
        wx.request({
          url:'url',
          data: {
            "code":res.code,
          },
          method: 'get',
          header: {
            'content-type': 'application/json'
          },
          success(res){
            console.log(res)
            //不能使用that.setData({})给全局变量赋值
            that.globalData.unionId=res.data.unionid;
            that.globalData.openId=res.data.openid;
            
             // 由于login()是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入callback 以防止这种情况
            if(that.loginCallBack){
              that.loginCallBack(res)
            }
            
          },
          fail(res){
            console.log('网络请求失败'+res)
          }
          
        })
        
      }
      
      })
  },

})

index.js

var app=getApp();
var openid=app.globalData.openId;

  onShow: function (e) {
    var that=this;
    //使用回调桉树Callback函数给全局变量赋值
    //同样不能使用that.setData({})赋值
    app.loginCallBack=function(){    
      openid=app.globalData.openId
    }

  },

如果想在其他页面引用全局变量的话,需要在那个页面的onLoad方法中再次赋值:

 onLoad: function (options) {
    vipopenid=app.globalData.openId;
    xxx=app.globalData.xxx;//其他变量
  },

否则,全局变量的值可能还是为空!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值