#javascript #node.js #typescript #nestjs
#javascript #node.js #typescript #nestjs
Вопрос:
У меня есть модуль a и модуль b. Модуль a создает экземпляры своих поставщиков услуг асинхронно, в то время как модуль b создает экземпляры синхронно. Оба содержат несколько конечных точек. Оба модуля импортируются AppModule
.
Теперь я новичок в том, чтобы думать о вещах со стороны сервера, и я также исхожу из angular lazy loading, так что потерпите меня здесь.
Если активирована конечная точка из модуля b(?), загружается ли также модуль a? Создаются ли также поставщики услуг, определенные в модуле a, которые используют асинхронные фабрики для создания экземпляров?
Ответ №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