NestJS Logo
NestJS 中文文档
v10.0.0
  • 介绍
  • 快速上手
  • 控制器
  • 提供者
  • 模块
  • 中间件
  • 异常过滤器
  • 管道
  • 守卫
  • 拦截器
  • 自定义装饰器
  • 自定义提供者
  • 异步提供者
  • 动态模块
  • 依赖注入作用域
  • 循环依赖
  • 模块引用
  • 懒加载模块
  • 执行上下文
  • 生命周期事件
  • 发现服务
  • 跨平台无关性
  • 测试
迁移指南
API 参考
官方课程
  1. 文档
  2. 进阶原理
  3. 异步提供者

自定义提供者
动态模块

异步提供者

在某些情况下,应用在启动之前需要先完成一些异步操作,例如等待数据库连接成功建立,才能开始对外提供服务。此时,可以通过异步提供者(Async Provider)来实现这种流程控制。

常见做法是结合 useFactory 和 async/await,让工厂函数返回一个 Promise。Nest 会在注入该提供者时,自动等待该异步任务完成,并将返回结果注入到依赖中:

{
  provide: 'ASYNC_CONNECTION',
  useFactory: async () => {
    const connection = await createConnection(options)
    return connection
  },
}
提示

更多用法示例可参考自定义提供者一章。

提供者注入

异步提供者的注入方式与普通提供者完全一致,都是通过注入令牌进行标识和绑定。在前面的示例中,只需使用 @Inject('ASYNC_CONNECTION'),即可将该连接实例注入到其他类中:

@Injectable()
export class SomeService {
  constructor(@Inject('ASYNC_CONNECTION') private connection: Connection) {}
}

进阶示例

在 TypeORM 实践一章中,我们提供了更完整的异步提供者配置和使用示例,可以帮助你在实际项目中更好地管理数据库连接。