我有模块a和模块b。模块a异步实例化其服务提供者,而模块b同步实例化。两者都包含多个端点。这两个模块都是由AppModule
导入的。
现在我很想从服务器端思考问题,而且我也是来自角度延迟加载,所以请耐心等待。
如果模块b的端点被激活(?)模块也是负载?模块a中定义的服务提供者是否使用异步工厂进行实例化,也实例化了?
异步提供程序的概念与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