Fall in IT.

async/await이 promise보다 좋은 이유 본문

프로그래밍언어/Javascript & Typescript

async/await이 promise보다 좋은 이유

D.Y 2018. 6. 26. 10:33


안녕하세요.


오늘은 ES8 스펙인 Async/Await에 대해서 알아보도록 하겠습니다.


특히, 콜백 지옥을 벗어나게 해주는 Promise와 어떤 차이가 있고 Async/Await이 더 좋은 이유에 대해서 알아보겠습니다.



Async / Await 이란?

  • callback이나 promise와 같이 비동키 코드를 작성하는 새로운 방법입니다.
  • Java와 같이 동기적으로 코딩할 수 있습니다.
    (동기적 코딩이란, 위에서 아래 흐름대로 순차적으로 진행된다는 말이다.)


Promise를 이용한 비동기요청 처리 방법
  • 예를들어, 사용자 정보를 받아오는 getUsers() 메소드가 있다고 가정해보자.
  • getUsers() 메소드는 promise 객체를 리턴하고, JSON 객체가 resolve된다.
  • getUsers() 메소드를 사용하기 위해서는 아래와 같이 사용합니다.
const users = () => {
    getUsers()
        .then(users => {
            // TODO: logic
            console.log(users);
            return users;
        })
        .catch(error => {
            // TODO: error handling
        });
}



Async / Await을 이용한 비동기요청 처리 방법

  • 함수를 선언할때 async라는 단어를 붙여줍니다.
  • await이라는 단어는 async로 정의된 함수에서만 사용되며, 비동기 함수를 call할때 앞에 붙여 사용합니다.
  • await getUsers()는 getUsers()의 promise가 resolve된 후에 응답 데이터가 전달됩니다.

const users = async() => { // TODO: logic console.log(await getUsers()); return await getUsers(); }



Async / Await이 Callback이나 Promise보다 나은 점

  • 자바와 같이 동기적 코드 흐름으로 개발이 가능하다.
  • 코드가 간결해지고, 가독성이 높아진다.
  • 응답데이터로 들어오는 변수(관례적으로 많이 사용되는 data, response)를 없앨 수 있다.
  • try / catch로 에러를 핸들링할 수 있다.
  • error가 어디서 발생했는지 알기 쉽다.
// promise 연속 호출
function getData() {
    return promise1()
        .then(response => {
            return response;
        })
        .then(response2 => {
            return response2;
        })
        .catch(err => {
            //TODO: error handling
            // 에러가 어디서 발생했는지 알기 어렵다.
        });
}

// async / await 연속 호출
async function getData() {
    const response = await promise1();
    const response2 = await promise2(response);
    return response2;
}



참고



모두 즐거운 코딩하세요~



Comments