【问题标题】:Module Resolution in nestjsnestjs 中的模块解析
【发布时间】:2019-03-18 05:32:46
【问题描述】:

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

现在我是从服务器端思考问题的新手,而且我也来自角度延迟加载,所以请耐心等待。

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

【问题讨论】:

    标签: javascript node.js typescript nestjs


    【解决方案1】:

    异步提供者的概念与 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
    

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      相关资源
      最近更新 更多