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