小程序首次加载时获取不到登录数据
经过排查,发现问题的原因是小程序的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
- 上一篇 »JavaScript : 获取文件名后缀
- 下一篇 »JS/CSS 延迟加载脚本