프로그래밍언어/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;
}
참고
모두 즐거운 코딩하세요~
반응형