我有模块 a 和模块 b 。模块 a 异步实例化其服务提供商,而模块 b 同步实例化。两者都包含多个端点。这两个模块都是由AppModule
导入的。
现在,我是从服务器端开始思考问题的新手,而且我还来自角型延迟加载,所以请在这里忍受。
如果模块 b 中的端点被激活(?),模块 a 也会加载吗?在模块 a 中定义的使用异步工厂实例化的服务提供者也被实例化了吗?
答案 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