uniapp中onLaunch异步方法与onLoad执行顺序问题(登录获取token等)

17 篇文章 3 订阅
12 篇文章 0 订阅

问题描述
app.vue里的onLaunch中如果有异步方法,比如登录方法,返回结果可能会在页面的 onLoad 之后,为了让页面的 onLoad 在 onLaunch 之后执行,使用以下解决方案

1、main.js添加如下代码

Vue.prototype.$onLaunched = new Promise(resolve => {
    Vue.prototype.$isResolve = resolve
})

2、在 App.vue 的 onLaunch 中增加代码 this.$isResolve()
这个方法必须在你的业务如ajax执行完毕后再执行

onLaunch () {
    // #ifndef H5
    uni.login({
        success: loginRes => {
            // #ifdef MP-WEIXIN
            login({ // 该接口为我们自己写的获取 openid/token 的接口,请替换成自己的
                appId: 'wx1234567890',
                code: loginRes.code
            }).then(res => {
                try {
                    console.info(res.object.token)
                    uni.setStorageSync('mcToken', res.object.token)
                    this.$isResolve()
                } catch (e) {
                    console.error(e)
                }
            })
            // #endif
        }
    })
    // #endif
}

3、在页面 onLoad 中增加代码 await this.$onLaunched
注意onload要添加async,否则编译不过去

async onLoad(option) {
    //等待登录成功	
    await this.$onLaunched;
	
    // 后续业务逻辑
},

转载自:https://www.lervor.com/archives/128/
转载自:https://blog.csdn.net/yfx000/article/details/108186719

如果您在小程序的onLaunch生命周期函数登录账号并获取用户信息,但在onLoad生命周期函数却无法获取到用户信息,可能是因为onLoad生命周期函数的执行时间比onLaunch生命周期函数晚,导致onLoad无法获取到用户信息。 为了解决这个问题,可以在onLaunch生命周期函数使用Promise来实现异步请求获取用户信息,并在onLoad生命周期函数使用Promise的then()方法来处理异步请求的结果。具体实现方法如下: ``` App({ onLaunch: function () { // 使用Promise进行异步请求获取用户信息 return new Promise((resolve, reject) => { wx.login({ success: res => { wx.getUserInfo({ success: userRes => { // 将获取到的用户信息存储到全局变量 this.globalData.userInfo = userRes.userInfo resolve() }, fail: res => { reject(res) } }) }, fail: res => { reject(res) } }) }) }, globalData: { userInfo: null } }) Page({ onLoad: function () { // 使用Promise的then()方法处理异步请求的结果 getApp().onLaunch().then(() => { // 从全局变量获取用户信息并进行相应的操作 var userInfo = getApp().globalData.userInfo // 进行相应的操作 }).catch(err => { console.log(err) }) } }) ``` 在onLaunch生命周期函数使用Promise进行异步请求获取用户信息,并将获取到的用户信息存储到全局变量。在onLoad生命周期函数使用Promise的then()方法处理异步请求的结果,从全局变量获取用户信息并进行相应的操作。 这样就可以解决在onLaunch登录账号并获取用户信息,在onLoad却无法获取到用户信息的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值