uni-app启动初始化执行顺序

44 阅读1分钟

uni-app启动初始化执行顺序

  1. index.html中的script标签中的代码
  2. App.vue的script标签外层代码
  3. main.js同步代码直到app.$mount()
  4. App.vue中的生命周期onLaunch
  5. App.vue中的生命周期onShow
  6. App.vue中的生命周期mounted
  7. main.js文件中app.$mount()之后的代码
  8. 首页index.vue的script标签外层代码
  9. 首页onLoad生命周期
  10. 前面的异步任务谁先执行完谁继续

以上说的都是同步代码执行顺序,如果有异步代码(哪怕写了await),则进入微队列等待,主队列继续执行下一步的同步代码,微队列中的异步任务,谁先执行完谁先继续走。

如果在程序初始化中有重要数据需要在首页onLoad里使用,但是是异步获取的,就会导致首页onLoad里拿不到数据,产生错误。解决方法就是给vue原型挂载一个promise对象和一个里面的resovle方法,在App.vue中调用resolve, 首页中用async修饰onLoad,在里面await vue原型上的promise,就可以避免此类错误。

//main.js
Vue.prototype.$onLaunched = new Promise((resolve) => {
  Vue.prototype.$isResolve = resolve
})
//App.vue
onLaunch() {
    setTimeout(()=> {
        console.log("onLaunch异步完成");
        this.$isResolve()
    }, 3000)
}
//index.vue
onLoad() {
  await this.$onLaunched
  console.log("首页onLoad");
}