어플리케이션 동작 과정에서 하나 이상의 비동기 작업이 완료될 때까지 지연되어야 하는 경우가 있다.
예를 들어, 데이터베이스와 연결이 설정될 때까지 요청 수락을 하지 않는 경우이다.
비동기 프로바이더를 이용하여 이를 구현할 수 있다.
useFactory
구문과 함께 async/await
를 사용하면 된다.
팩토리는 Promise
객체를 반환하고 팩토리 함수는 비동기 작업을 await
할 수 있다.
Nest는 그러한 프로바이더에 의존성을 주입하는 클래스를 인스턴스화하기 전에 Promise의 완료를 기다린다.
{
provide: 'ASYNC_CONNECTION',
useFactory: async () => {
const connection = await createConnection(options);
return connection;
},
}
비동기 프로바이더는 다른 프로바이더와 마찬가지로 토큰에 의해 다른 구성 요소에 삽입된다.
위의 예를 @Inject('ASYNC_CONNECTION')
구문을 사용해 주입할 수 있다.