Разрешение модуля в nestjs - PullRequest
1 голос
/ 18 марта 2019

У меня есть модуль a и модуль b .Модуль a создает свои поставщики услуг асинхронно, в то время как модуль b создает синхронно.Оба содержат несколько конечных точек.Оба модуля импортируются с помощью AppModule.

Теперь я новичок в мысли о вещах со стороны сервера и также из-за ленивой угловой загрузки, так что потерпите меня здесь.

Если активирована конечная точка из модуля b (?), Загружается ли также модуль a ?Получают ли провайдеры услуг, определенные в модуле a , которые используют асинхронные фабрики для создания экземпляров, также экземпляры?

1 Ответ

0 голосов
/ 18 марта 2019

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