有如下代码
async onLaunch() {
console.log('[app.js - onLaunch] execute start')
await proTest()
await proTest2()
console.log('[app.js - onLaunch] executed end')
}
proTest 与 proTest2 均为 Promise
proTest 使用了 setTimeout 模拟接口调用 延迟两秒
proTest2 使用了微信获取用户设备信息的 api
理想情况下应该为 onLaunch 阻塞两秒之后 再通过 proTest2 方法 将设备信息放到 storage 中 再通过 behaviors 的方式从 storage 中取出 这样页面就自带设备信息而不需要重新获取了
proTest 确实延迟了两秒 但是这期间已经开始执行页面(此处使用的 Component 替代 Page)的生命周期函数了 所以是不是可以说 虽然 app.js 中的生命周期确实先于 page 或 component 的生命周期 但这种情况下并不会等待 onLaunch 中的代码执行完毕 再执行 page 或 component 的生命周期呢 ?
另外 微信小程序 各生命周期的执行顺序(从 App 到 Page 到 Component)有文档参考吗 我没有找到 如果有的话请诸位大佬给个链接我参考参考 谢啦先~
导致的线上问题:其他 page 中有依赖 模拟接口 中返回的值 以及模拟接口之后的代码放入 storage 中的值 但是 其他 page 并没有等模拟接口执行完毕再执行 所以未获取到需要的参数 导致初次进入页面后白屏 必须手动重新刷新页面才能获取
重现方式:点击 清除缓存 再 重新编译 如最后图片所示(务必每次都这样测试 模拟用户第一次进入小程序 或者 手动清除 storge 中的 key 也可以)
代码片段:https://developers.weixin.qq.com/s/8SacrFmn7kSv
------------------------------------------------------------------------------------------------------------------
ps: 代码片段导入的时候报错 Uncaught ReferenceError: __wxConfig is not defined
我是通过点击 不校验安全域名 勾上 再取消 或者 取消 再勾上 就不报错了 (别问我为什么 一问一个不吱声)
这些生命周期的函数是异步执行的。如果你在page中需要获取onLaunch里面的执行结果,可以在page里面注册一个回调函数导app.js,onLaunch执行完毕后触发这个回调函数
可以参考一下https://developers.weixin.qq.com/community/develop/article/doc/000e28e8e5cb684acb012b0b06b813
执行顺序是:
两者是异步执行的。
而不是: