doubleyong
管理员
管理员
  • 最后登录2023-12-01
  • 发帖数1156
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:628回复:0

[微信小程序]onLanch 与 页面中的onLoad方法的异步问题

楼主#
更多 发布于:2023-07-27 10:49
背景: 在小程序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
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号