在App.vue的onLaunch中请求接口,拿到接口返回的数据存入缓存或vuex中,但在index.vue页面的onLoad中无法获取数据。
大概是因为执行index.vue页面的onLoad时,App.vue的onLaunch中的接口还未获取到数据。
要如何处理才能取到数据呢?
 
                                        
                                    
                                    - 发布:2019-05-13 15:24
- 更新:2019-12-02 16:22
- 阅读:4998
onLaunch中的异步请求结果,在页面onLoad中调用为空
 
                                                                    
                                                                incess - 阿莫熊科技,长期合作项目,QQ微信同号 1410323850 专业团队为您解决问题
在onLoad页面设置延时,因为在onLaunch中异步请求并未执行完,所以还未赋值至VUEX,也可以使用同步请求
 
                                                                    
                                                                同问科学的方法
- 
                                                  我后来做了这样的处理,做了一个过渡页面,第一个加载的页面就是这个过渡页面,就显示正在加载中,在这个页面里通过promise处理完所有的请求再跳转到首页 2019-09-20 22:22 
- 
                                                  
- 
                                                  回复 爱吃鱼的靖哥哥: 我做的需求是onLaunch里调登录,拿到token赋值给vuex,然后在onload里,监听vuex变量是否改变,在请求接口,来解决这个异步问题 2019-09-27 13:39 
 
                                                                    
                                                                可以使用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;  
            });  
        } 
             
             
             
			 
                                                                    

 
                                                                    

 
                                                                     
            
b***@yahoo.com
我做的需求是onLaunch里调登录,拿到token赋值给vuex,然后在onload里,监听vuex变量是否改变,在请求接口,来解决这个异步问题
2019-09-27 13:39