app.js中给globalData赋值总是出错?
发布于 5 年前 作者 cmeng 12835 次浏览 来自 官方Issues

我在app.js的onLaunch里,用wx.login获取到code,然后在success里从后台获取到openid,但是给globalData的openid属性赋值时,总是出现 Cannot read property 'globalData' of null 错误,但是 下面的 wx.getSetting 方法里获取的 userinfo就能赋值正常,是怎么回事呢?

我的赋值语句: this.globalData.openid = res.data.data.openid;这名出错

在生成项目时里生成的那个代码:this.globalData.userInfo = res.userInfo,这句就很正常




3 回复

在最前面加一句:let that = this

//app.js

App({

 

  globalData: {

    host: ‘’,

    baseUrl: ‘’,

    urlLogin: ‘’,

    userInfo: null,

    user: null,

    appid: ’***’,

    secret: ‘***’,

    openid: null,

    session_key: null

  },

  onLaunch: function() {

    // 展示本地存储能力

    var logs = wx.getStorageSync(‘logs’) || []

    logs.unshift(Date.now())

    wx.setStorageSync(‘logs’, logs)

    // 登录  

    wx.login({

      success: res => {

        console.log(res);

        wx.request({

          url: this.globalData.baseUrl + ‘Login’,

          data: {

            code: res.code

          },

          success: function(res) {

            console.log(‘res.data=’);

            console.log(res.data.data);

            console.log(res.data.data.openid);

            console.log(res.data.data.session_key);

            wx.setStorageSync(‘openid’, res.data.data.openid);

            //this.globalData.openid = res.data.data.openid; 这句错

           // this.globalData.session_key = res.data.data.session_key;

            var JsonData =res.data;

            console.log(JsonData);

          },

          fail: function(res) {

            console.log(res);

          },

          complete: function (res) {

            console.log(‘complete’);

           // console.log(this.globalData.baseUrl);

           // this.globalData.userInfo = ‘’; 这个也错

          }

        })

      }

    })

    console.log(‘异步、同步?’);

    // 获取用户信息

    wx.getSetting({

      success: res => {

        if (res.authSetting[‘scope.userInfo’]) {

          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

          wx.getUserInfo({

            success: res => {

              console.log(‘getSetting内’);

              // 可以将 res 发送给后台解码出 unionId

              this.globalData.userInfo = res.userInfo //但是他这个不错

              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

              // 所以此处加入 callback 以防止这种情况

              if (this.userInfoReadyCallback) {

                this.userInfoReadyCallback(res)

              }

            }

          })

        }

      }

    })

  },

  onShow:function()

  {

 

  }

})

你代码只抄了一半,没有注意 this指向问题

回到顶部