在App.vue的onLaunch中请求接口,拿到接口返回的数据存入缓存或vuex中,但在index.vue页面的onLoad中无法获取数据。
大概是因为执行index.vue页面的onLoad时,App.vue的onLaunch中的接口还未获取到数据。
要如何处理才能取到数据呢?
- 发布:2019-05-13 15:24
- 更新:2019-12-02 16:22
- 阅读:4702
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