|
背景: 在小程序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 |
|
|