onLoad和onShow中异步请求的执行顺序
来源:7-21 页面间事件通信机制实践

Seven_柒柒
2021-07-26
老师, 在onLoad
中存在异步请求函数await this._getService()
,所以this._getServie()
里面的代码还没执行完时,onShow
就已经执行完了,所以 this._checkRole
没有获取到service
才导致有BUG。
但我听您的课,说是问题出在 this._getService
函数中的 this.setData({})
但我感觉,更倾向于前者。正确的情况是怎样呢
- 代码
写回答
1回答
-
onLoad() 和onShow() 两个本身没什么必然联系,只不过 onLoad 的执行顺序是在 onShow 之前,仅此而已。
这里会说原因是在 this.setData()是因为 setData 本身是异步的。生命周期函数本身也是异步的,在一个异步里面写异步,这个执行顺序就不可控了。
这里主要是想表达,假如你在 onShow 里面的逻辑,会依赖 onLoad 的结果,那么就要避免这个结果是通过异步执行得来的,特别是这个结果比较大(很多属性的对象)的时候,所以这里关键在于异步问题,是不是 this.setData不重要。
至于如何避免,不同场景有不同解决方案,可以留意课程中不同页面模块的实现方法。
00
相似问题