我在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,这句就很正常
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()
{
}
})