내가 처음에 짰던 코드는 다음과 같다.
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 : 연산 실패

'Backend > PostgreSQL and TypeORM' 카테고리의 다른 글
nullable 에러 해결 -> ValueTransformer (0) | 2024.03.19 |
---|---|
zero-length delimited identifier at or near ''" (0) | 2024.01.13 |
QueryFailedError: relation DB이름 does not exist (2) | 2023.10.10 |
SQL 쿼리문이 Run 실행환경에서 안나올때 (0) | 2023.08.29 |
엔티티와 SQL문의 관계 (0) | 2023.08.23 |