Uncaught (in promise) TypeError: Cannot read property '__asyncLoader' of undfine

94 阅读1分钟

本文主要是记录一下在开发中遇到的问题,主要基于vue3路由跳转时爆出的问题。Uncaught (in promise) TypeError: Cannot read property '__asyncLoader' of undfined。爆出错误的截图如下: image.png

当时爆出这个问题的时候很懵逼,以为是路由的问题,可是查询了好久肯定路由是好的,肯定是正确的,所以就上网查了一下问题,网上的解决方案如下:

辅助函数defineAsyncComponent

Vue 3.x 中,对异步组件的使用跟 Vue 2.x 不同了。变化主要有三点:

  • 异步组件声明方法的改变:Vue 3.x 新增一个辅助函数defineAsyncComponent,用来显示声明异步组件;
  • 异步组件高级声明方法中的 component 选项更名为loader;
  • loader绑定的组件加载函数不再接收resolve和reject参数,而且必须返回一个Promise;

vue3项目中引入组件的写法如下:

import { defineAsyncComponent } from 'vue' // 引入defineAsyncComponent

components: {
    child: defineAsyncComponent(_ => import('xxx.vue'))
},

注意:

defineAsyncComponent只适用于vue3的异步组件,对于路由懒加载是无效的。路由懒加载的方法和vue2.x一样。

可是对于我来说这个根本解决不了问题,我的错误还是一直在出现,后面偶然看到一篇问题,说是因为数据返回的问题:问题正是出在formatter方法原样返回了row,formatter如果返回了一个对象,哪怕是最简单的{}也会出现这个错误。 然后我把自己的所有formatter检查了一下,发现一个时间格式化函数返回的是一个对象,本来应该是一个字符串的,原因的后端使用fastjson处理时出现问题导致。