nestjs中的模块解析

时间:2019-03-18 05:32:46

标签: javascript node.js typescript nestjs

我有模块 a 和模块 b 。模块 a 异步实例化其服务提供商,而模块 b 同步实例化。两者都包含多个端点。这两个模块都是由AppModule导入的。

现在,我是从服务器端开始思考问题的新手,而且我还来自角型延迟加载,所以请在这里忍受。

如果模块 b 中的端点被激活(?),模块 a 也会加载吗?在模块 a 中定义的使用异步工厂实例化的服务提供者也被实例化了吗?

1 个答案:

答案 0 :(得分:0)

异步提供程序的概念与Angular的有所不同。与路由或控制器无关。

如果提供者是异步的,则意味着它需要等待异步资源(Promise)被解析后才能实例化。那可以等待建立数据库连接或从文件系统加载配置。启动应用程序后,所有异步提供程序都已完全实例化。


要尝试此操作,可以按如下所示异步添加HttpModule

HttpModule.registerAsync({
  useFactory: async () => {
    console.log('Starting to instantiate');
    // wait 5 seconds to simulate asynchronous task
    await new Promise(resolve => setTimeout(resolve, 5000));
    console.log('Done after 5 seconds');
    return {};
  },
}),

],

启动应用程序时,您会看到启动将等待5秒钟。 HttpModule不会像您期望的那样来自Angular动态地实例化。

[Nest] 242   - 3/18/2019, 2:08:04 PM   [NestFactory] Starting Nest application...
Starting to instantiate
[Nest] 242   - 3/18/2019, 2:08:04 PM   [InstanceLoader] AppModule dependencies initialized +8ms
Done after 5 minutes
[Nest] 242   - 3/18/2019, 2:08:09 PM   [InstanceLoader] HttpModule dependencies initialized +5004ms