# Асинхронные провайдеры
Иногда запуск приложения должен быть отложен до завершения одной или нескольких асинхронных задач. Например, вы можете не начинать принимать запросы, пока не будет установлено соединение с базой данных. Этого можно добиться с помощью асинхронных провайдеров.
Синтаксис для этого заключается в использовании async/await
с синтаксисом useFactory
. Фабрика возвращает Promise
,
а функция фабрики использует await
асинхронных задач. Nest будет ожидать разрешения промиса перед инстанцированием любого
класса, который зависит от такого провайдера.
{
provide: 'ASYNC_CONNECTION',
useFactory: async () => {
const connection = await createConnection(options);
return connection;
},
}
Подробнее о синтаксисе пользовательских провайдеров здесь.
# Внедрение
Асинхронные провайдеры инжектируются в другие компоненты с помощью своих маркеров, как и любой другой провайдер.
В примере выше вы бы использовали конструкцию @Inject('ASYNC_CONNECTION')
.
# Пример
В рецепте TypeORM есть более содержательный пример асинхронного провайдера.