Nest 循环依赖解决方案:forwardRef 的艺术

Nest 模块之间可以通过 imports 引用其他模块。

那 Module 和 Module 如果相互引用怎么办?

module 之间的循环依赖

创建一个 nest 项目:

bash 复制代码
nest new module-forward -p npm

创建两个 Module:

bash 复制代码
nest g module a
nest g module b

这种相互引用的情况就会报错。

使用 forwardRef 包装函数,该函数返回模块或提供者的引用,而不是直接引用,从而延迟了依赖项的解析:

这时候就没有报错了。

provider 循环依赖

bash 复制代码
nest g service c --no-spec --flat
nest g service d --no-spec --flat

两个 service 分别依赖了对方的方法。

这时候会报错,也是因为循环依赖导致的。

在提供者中通过 @Inject(forwardRef(() => Type)) 来注入依赖:

这样就不会报错了。

我们相互能不能正确获取结果,在 AppService 使用:

访问 localhost:3000:

没有问题。

合理的设计

  • 重新设计代码,避免循环依赖的产生是最好的做法。
  • 可以引入新的中间件、库或服务来分解复杂的依赖关系。
相关推荐
gopher95117 分钟前
HTML详解
前端·html
Tiny20178 分钟前
前端模块化CommonJs、ESM、AMD总结
前端
吕永强10 分钟前
CSS相关属性和显示模式
前端·css·css3
结衣结衣.15 分钟前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
全栈技术负责人16 分钟前
前端提升方向
前端
程序员陆通16 分钟前
Spring Boot RESTful API开发教程
spring boot·后端·restful
赵锦川16 分钟前
css三角形:css画箭头向下的三角形
前端·css
qbbmnnnnnn21 分钟前
【WebGis开发 - Cesium】如何确保Cesium场景加载完毕
前端·javascript·vue.js·gis·cesium·webgis·三维可视化开发
无理 Java1 小时前
【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)
java·后端·spring·面试·mvc·框架·springmvc
f8979070701 小时前
layui动态表格出现 横竖间隔线
前端·javascript·layui