經過排查,發現問題的原因是小程序的js都是異步進行的,首次加載時可能會先加載首頁.js,再加載app.js,導致app.js里的登錄函數在首頁onload方法之后調用,獲取不到登錄數據
解決辦法:再在app.js里加個回調函數。
app.js:
App({ onLaunch: function () { if (!wx.cloud) { console.error('請使用 2.2.3 或以上的基礎庫以使用雲能力') } else { wx.cloud.init({ env:'', traceUser: true, }) // 調用雲函數 wx.cloud.callFunction({ name: 'login', data: {}, success: res => { console.log('[雲函數] [login] user openid: ', res.result.openid) this.globalData.openid = res.result.openid; if (this.openidCallback){ this.openidCallback(res.result.openid); } }, fail: err => { console.error('[雲函數] [login] 調用失敗', err) wx.showToast({ title: '用戶id調用失敗', icon: 'none', duration: 800 }) } }) } }, globalData: { openid: '' }, })
首頁js的onload:
onLoad(){ if (getApp().globalData.openid && getApp().globalData.openid != '') { console.log(getApp().globalData.openid) this.setData({ openid: getApp().globalData.openid, }) } else { getApp().openidCallback = openid => { if (openid != '') { this.setData({ openid: openid, }); } } } },
回調函數參考:https://blog.csdn.net/qq_41082746/article/details/105747168