1

如题所示本周遇到了这样的报错。
完整报错:

TypeError: Class extends value undefined is not a constructor or null

翻译过来就是类继承了undefined或不是构造函数或null,可以初步确定问题出现在给出报错的类所继承的类中。

我们当前的报错类是在taskApproveService中。
也就是说可以推断出是他的父类出现了问题。

搜索之后发现这个报错主要是因为项目自身配置问题或者是存在循环依赖。
首先可以排除是项目自身问题,那么问题就出现在我们新增的代码部分。

但是根据我之前的经验来看,怎么看也看不出来会存在循环依赖的的地方。
之后又再网上查找了其他解决方法,但是都不适用。
后来又去代码中查看报错位置和我们新增代码的联系后终于发现了问题所在。
我们新增的代码结构,圈起来的部分是我所更改的地方:
image.png

当系统启动时会实例化taskApproveService,也就是报错位置的service,然后他去调用它的父类去注入父类所需要的类,父类注入了taskAutoMationService,进而一步步注入,直到taskService,而taskService由注入了taskApproveService,从而导致TaskBaseService构造失败,也就出现了如上的报错。

也就是说上面的报错可以由父类存在循环依赖而引发。
当我们再写较大的项目时也许出现这种错误时很常见的,但是由于之前写的项目都较小,循环依赖往往只出现在两三个文件中并且之前遇到的报错更为人性化———把循环依赖的整个流程都提示出来。这也就导致了这个经典问题浪费了不少时间。


李明
441 声望19 粉丝