w***@qq.com
w***@qq.com
  • 发布:2019-05-13 15:24
  • 更新:2019-12-02 16:22
  • 阅读:4543

onLaunch中的异步请求结果,在页面onLoad中调用为空

分类:uni-app

在App.vue的onLaunch中请求接口,拿到接口返回的数据存入缓存或vuex中,但在index.vue页面的onLoad中无法获取数据。
大概是因为执行index.vue页面的onLoad时,App.vue的onLaunch中的接口还未获取到数据。
要如何处理才能取到数据呢?

2019-05-13 15:24 负责人:无 分享
已邀请:
桃子先生

桃子先生

同问啊

  • b***@yahoo.com

    我做的需求是onLaunch里调登录,拿到token赋值给vuex,然后在onload里,监听vuex变量是否改变,在请求接口,来解决这个异步问题

    2019-09-27 13:39

incess

incess - 阿莫熊科技,长期合作项目,QQ微信同号 1410323850 专业团队为您解决问题

在onLoad页面设置延时,因为在onLaunch中异步请求并未执行完,所以还未赋值至VUEX,也可以使用同步请求

  • 桃子先生

    延时的做法,稍不科学,不太能估算一个合适的延时时间

    2019-05-21 15:38

  • incess

    回复 桃子先生: 你异步请求经过vuex动态获取快速加载数据更不科学,是自己把性能和耗时给提上来的,根本原因就是你们自己的做法不对

    2019-05-21 15:46

爱吃鱼的靖哥哥

爱吃鱼的靖哥哥 - 行走在全栈路上的码农

同问啊,有好的解决方法了吗

b***@yahoo.com

b***@yahoo.com

同问科学的方法

  • 爱吃鱼的靖哥哥

    我后来做了这样的处理,做了一个过渡页面,第一个加载的页面就是这个过渡页面,就显示正在加载中,在这个页面里通过promise处理完所有的请求再跳转到首页

    2019-09-20 22:22

  • b***@yahoo.com

    回复 爱吃鱼的靖哥哥: 我用的是监听vuex

    2019-09-27 13:36

  • b***@yahoo.com

    回复 爱吃鱼的靖哥哥: 我做的需求是onLaunch里调登录,拿到token赋值给vuex,然后在onload里,监听vuex变量是否改变,在请求接口,来解决这个异步问题

    2019-09-27 13:39

wallow

wallow

可以使用eventBus,在onLaunch函数里面请求用户数据,成功获取数据之后触发一个事件,然后在首页监听这个事件。
app.vue代码:

onLaunch: function() {  
            console.log('App Launch');  
            uni.login({  
                success: (res) => {  
                    if(res.code) {  
                        console.log(res)  
                    } else {  
                        console.log('获取用户登录状态失败' + res.errMsg);  
                    }  
                }  
            });  
            uni.getSetting({  
                success: (res) => {  
                    console.log(res);  
                     if (res.authSetting['scope.userInfo']) {  
                         uni.getUserInfo({  
                            success: (res) => {  
                                // console.log(res)  
                                // console.log(getApp().globalData)  
                                // 如果可以,那么直接设置用户信息  
                                getApp().globalData.userInfo = res.userInfo;  
                                console.log(getApp().globalData.userInfo)  
                                // getUser网络请求,可能会在page.onload之后才返回,在获取数据成功时派发一个事件  
                                 this.$bus.$emit("send-userinfo", getApp().globalData.userInfo);  
                            }  
                         });  
                     }  
                }  
            });  
        },

在首页监听send-userinfo事件,index.vue部分代码:

        onLoad() {  
            // console.log(getApp().globalData.userInfo, 'hh');  
            this.userInfo = getApp().globalData.userInfo;  
            this.$bus.$on("send-userinfo", data => {  
                console.log('获取用户数据成功');  
             this.userInfo = data;  
            });  
        }
hhyang

hhyang - 如有问题,请添加QQ1606726660 备注付费咨询

该问题目前已经被锁定, 无法添加新回复