Разрешение модуля в nestjs

#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