더북(TheBook)

콜백과 다르게 코드의 깊이가 깊어지진 않지만, 코드 길이는 여전히 깁니다. async/await 문법을 사용하면 다음과 같이 바꿀 수 있습니다. async function이라는 것이 추가되었습니다.

async function findAndSaveUser(Users) {
  let user = await Users.findOne({});
  user.name = 'zero';
  user = await user.save();
  user = await Users.findOne({ gender: 'm' });
  // 생략
}

놀라울 정도로 코드가 짧아졌습니다. 함수 선언부를 일반 함수 대신 async function으로 교체한 후, 프로미스 앞에 await을 붙였습니다. 이제 함수는 해당 프로미스가 resolve될 때까지 기다린 뒤 다음 로직으로 넘어갑니다. 예를 들면, await Users.findOne({})resolve될 때까지 기다린 다음에 user 변수를 초기화하는 것입니다.

위 코드는 에러를 처리하는 부분(프로미스가 reject된 경우)이 없으므로 다음과 같은 추가 작업이 필요합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.