Иногда запуск приложения должен быть отложен до завершения одной или нескольких асинхронных задач. Например, вы можете не начинать принимать запросы, пока не будет установлено соединение с базой данных. Этого можно добиться с помощью асинхронных провайдеров.

Синтаксис для этого заключается в использовании async/await с синтаксисом useFactory. Фабрика возвращает Promise, а функция фабрики использует await асинхронных задач. Nest будет ожидать разрешения промиса перед инстанцированием любого класса, который зависит от такого провайдера.

{
  provide: 'ASYNC_CONNECTION',
  useFactory: async () => {
    const connection = await createConnection(options);
    return connection;
  },
}

Асинхронные провайдеры инжектируются в другие компоненты с помощью своих маркеров, как и любой другой провайдер. В примере выше вы бы использовали конструкцию @Inject('ASYNC_CONNECTION')