본문 바로가기

Backend/PostgreSQL and TypeORM

find()에는 Promise가 내장되어 있다

내가 처음에 짰던 코드는 다음과 같다. 

  async findCollaborationList() {
    return await this.collaborationRepository.find();
  }

async~await는 항상 짝궁이라고 생각해서 await를 붙여주며 return문을 작성했다. 

 

그러나, find()에는 놀라운 사실이 숨겨져있었다. 

Entity의 배열 형태를 반환할때 Promise를 그대로 반환해서 await를 쓰지 않아도 된다는 것이다. 

find 메소드 자체가 Promise를 반환하기 때문에 await를 쓰지 않아도 된다. 

 

Promise를 반환하는 함수는 자체적으로

비동기 작업을 수행 + Promise 객체 반환 + 그 자체로 비동기 처리가 완료될 때까지 기다려야 할 필요X 의 역할을 가지고 있다. 

 

수정 후 코드는 다음과 같다.

  async findCollaborationList() {
    return this.collaborationRepository.find();
  }

 

 

추가적으로 Promise의 역할에 대해서도 좀 더 찾아보았다. 아직 이 개념에 대해 좀 헷갈리는 것 같다. 

Promise는 프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자 역할 

비동기 연산이 종료된 이후에 결과값과 실패사유를 처리하기 위한 처리기 연결 

비동기 메서드에서 마치 동기 메서드처럼 값 반환 가능 

-> 미래 어떤 시점에 어떤 결과를 제공하겠다는 일종의 '약속' 

 

[Promise의 상태값]

pending : 대기 상태로 이행하지도, 거부하지도 않은 초기 상태

fulfilled : 연산이 성공적으로 완료 

rejected : 연산 실패 

출처 : MDN