背景: 在小程序onLanch 事件中,进行登录操作,获取token ; 跳转页面后,在页面的onLoad事件中,需要使用token去请求数据;
问题: 在页面去请求数据时,发现token 还没有获取成功,原因是登录操作是异步的,不会等获取 token成功后,在执行页面事件,获取数据 解决方案:使用了object.defineProperty 原理: 将token 存在app.globalData 中,写一个监听方法,再在页面onLoad中,去调用监听的方法,并将需要使用token去请求数据的方法,放在一个数据中,传给监听的方法 示例代码: app.js 中: // app.js watch (method) { let obj = this.globalData // 这里监听 openId Object.defineProperty(obj, "openId", { configurable: true, enumerable: true, set: function (value) { method(value) // 触发页面回调函数 } }) }, onLaunch () { wx.login({ success: result => { wx.request({ url: 'test.php' // 示例 data: {...}, success: res => { this.globalData.openId = res.data.openId } }) } }) } // page.js onLoad () { const app = getApp() app.watch(this.watchBack) } watchBack (openId) { if (openId) { // do something } } 参考:https://blog.csdn.net/z291493823/article/details/121215584?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-121215584-blog-124463421.235^v38^pc_relevant_sort_base2&spm=1001.2101.3001.4242.3&utm_relevant_index=7 |
|
|