1.前言 因為小程式是由js代碼編寫的,我js學得不是特別的好,所以,剛開始以為js跟java一行,一行一行的執行,後面才發現,完全不是,所以有時候,我們在獲取用戶信息和openId的時候,要向後臺發送請求,所以有時有可能請求還沒有返回數據,小程式這邊已經賦值了,只能得到一個undifine,很桑心 ...
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.後言
小程式的坑確實挺多,但是你如果仔細閱讀文檔,都能解決,所以還是多讀文檔吧