코딩쌀롱

[JS] Promise → async/await로 바꾸기 본문

개발공부

[JS] Promise → async/await로 바꾸기

이브✱ 2021. 1. 26. 22:34

 

Promise에 대해서는 이전 글에 작성하였습니다.

 

✱ Promise → async/await

function findAndSaveUser(Users) {
  Users.findOne({})
    .then(user => {
      user.name = 'eve';
      return user.save();
    })
    .then(user => {
      return Users.findOne({ gender: 'f' });
    })
    .then(user => {
      // 생략
    })
    .catch(err => {
      console.error(err);
    });
}
      

위 코드를 async/await로 바꿔보면 (에러 처리부분은 이 다음 코드에)

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

함수 선언부를 일반 함수가 아닌 async function으로 교체하고, 프라미스 앞에 await를 붙인다. 프라미스가 resolve될 때까지 기다린 뒤 다음 로직으로 넘어간다. 2번 라인은 await Users.findOne({})이 resolve될 때까지 기다린 다음에 user 변수를 초기화한다.

 

에러를 처리하는 부분을 추가하면

async function findAndSaveUser(Users) {
  try {
    let user = await Users.findOne({}); 
    user.name = 'eve';
    user = await user.save();
    user = await Users.findOne({ gender: 'f' });
    // 생략
  } catch (err) {
    console.error(err);
  }
}

화살표 함수도 사용 가능하다.

const findAndSaveUser = async (Users) => {
  try {
    let user = await Users.findOne({}); 
    user.name = 'eve';
    user = await user.save();
    user = await Users.findOne({ gender: 'f' });
    // 생략
  } catch (err) {
    console.error(err);
  }
}

 

 

 


참고

 

책 - 조현영 〔Node.js 교과서〕

Comments