Node.js / async & await

박재형·2020년 9월 28일

nodejs

목록 보기
6/6
post-thumbnail

☝️ async / await

async와 await은 약간 특별한 문법으로 볼 수 있는데, 기본적으로 프로미스(Promise)를 편하게 쓸 수 있고 한번 더 깔끔하게 줄일 수 있다.

💡 async

async function() {
  return 0;
}

//또는

async () => {
  return 0;
}

위와 같이 function앞에 async를 붙히거나, 화살표 함수앞에 async를 붙혀서 사용할 수 있으며 async를 사용하면 해당 함수는 항상 프로미스를 반환한다.

💡 await

const promise = await promise

자바스크립트는 기본으로 await를 만나면 프로미스가 처리될 때 까지 기다린다. 쉽게 말해 프로미스가 대기상태가 아닌 처리가 될 때 까지 await 이 있는 코드는 실행이 되지 않는다.

💻 Example

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

위 코드는 await / async 문법을 쓰지 않은 콜백함수 코드이다. 위 코드를 await / async 문법을 써서 바꿀 수 있다.

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

콜백을 바꾸니 코드도 확실히 짧아지고 보기에도 편해진 것을 알 수 있다. 함수 선언부앞에 async를 붙히고 Users.findOne() 앞에 await을 붙혀서 해당 프로미스가 resolve될 때까지 기다린 뒤 넘어간다.

지금은 간단하게 설명하고 넘어가는 것이라 나중에 직접 로그인기능 구현하고 CRUD 시스템을 구현하거나 하면서 더 많이 쓸 예정이니 그 때 새로운 것이 나오면 부가 설명을 할 것이다.

출처

Node.js 교과서
MDN Web docs

0개의 댓글