1***@qq.com
1***@qq.com
  • 发布:2022-03-18 18:07
  • 更新:2023-09-08 09:48
  • 阅读:1237

uniapp如何保证进入首页之前完成异步请求?

分类:uni-app

现在是这么个场景,
进入app的时候需要从服务端加载一个全局的配置,
虽然按照常理,直接在App.vue里的onLaunch方法里加入就行了,
但问题是请求是异步的,onLaunch方法结束了,但配置请求还没返回响应,就可能导致开屏里显示的内容不对。
于是,我想了一个办法,就是自己做一个splash页面,设置为默认页,然后splash页面里进行全局配置加载,加载完成以后,再跳转到真正的主页。
但这个方案也有个问题,那就是如果是发布的H5端,首次进入的页面并不一定是主页。
然后我又想一个兼容性的办法,就是通过条件编译,在onLaunch里保存当前的url,然后splash页面再跳转到保存的url。

但我总感觉有点混乱……
我感觉这是一个很常见的需求啊,如何才能处理得优雅一点?

2022-03-18 18:07 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

百度吧 通过一个promise 可以实现

  • 1***@qq.com (作者)

    我知道你说的 async await,问题是onLaunch不会被await,所以即便你用了Promise,他也不会等待Promise 的resolve,而直接加载主页面了

    2022-03-19 23:13

哈哈柚

哈哈柚

app端异步请求结束后再手动移除启动图

  • 3***@qq.com

    我目前是这么做的,感觉好麻烦

    2022-11-14 13:46

  • 3***@qq.com

    因为h5这边体验是不一致的

    2022-11-14 13:47

2***@qq.com

2***@qq.com

我也是来搜这个问题的。

我先是实现了路由守卫,路由守卫内可以异步阻塞,直到next()才会真正进入页面。在路由守卫中去判断第一次进入之前会加载全局配置。

我也是觉得这个办法并不完美,因为路由守卫实际上是每次跳转路由前都会去判断。另外路由守卫在阻塞时,页面上会显示什么,又是个问题。

z***@gmail.com

z***@gmail.com - full stack-overflow engineer

我一开始是把数据放到globalData里,但是没法响应状态。后来弄了一个 store.js 就可以所有组件共享了。

要回复问题请先登录注册