promise, await, async 란 ?!
async, await은 비동기 처리를 위한 문법입니다.
비동기 처리를 한다는 것은 비동기로 실행되는 코드를 순서가 보장되도록 처리한다는 의미로 이해했습니다.
(실제 프로세스가 동작하는 순서와 개발자가 작성한 코드의 순서의 싱크를 맞추는 처리 작업으로 이해했습니다.)
예를 들어 어떤 함수에 비동기로 실행되는 메소드가 있을 때, 순차적으로 수행되어야 원하는 로직의 결과가 나오는 경우, 순차 수행이되도록 보장하는 것입니다.
가령 아래와 같이 Dao를 찾아서 출력하는 메소드가 있을 때, 비동기 처리를 하지 않는다면,(findOne은 Promise객체를 반환하는 메소드.) findOne코드 부분의 처리가 if (dao)조건문 처리보다 늦어지게 되는 상황이 발생하는 경우, dao 변수 값은 undefined (혹은 null?)이 되어 실제로 dao가 DB에 있더라도 if 조건문은 실행되지 않게 될 것입니다.
function findDao() {
const dao = this.daoRepository.findOne({
where: where,
});
if (dao) {
console.log(dao);
}
}
아래와 같이 함수에 async 예약어를 붙이고 내부의 비동기 처리를 하고자하는 코드에 await을 붙이게 되면, 해당 코드는 비동기 처리가 되어 코드의 순서가 보장되게 됩니다. 즉, .findOne이 수행되고 이후 조건문이 수행되게 됩니다.
async function findDao() {
const dao = await this.daoRepository.findOne({
where: where,
});
if (dao) {
console.log(dao);
}
}
주의 사항 - 비동기 처리를 하고자하는 메소드는 Promise 객체 타입이어야 정상적으로 비동기 처리가 됩니다. 즉, 위의 예시에서 findOne메소드는 Promise 객체를 반환합니다.