Концепция асинхронных провайдеров немного отличается от концепции 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