async
와await
는 자바스크립트의 비동기 처리 패턴 중 가장 최근에 나온 ES8 문법이다.
기존의 비동기 처리 방식인콜백 함수
와프로미스
의 단점을 보완하고 개발자가 읽기 좋은 코드를 작성할 수 있게 도와준다.
흔히 말하는콜백지옥
, 혹은 여러 개의프로미스
가 서로 의존하고있는 경우 코드의 가독성이 저하될 수 있다.
이를async
와await
를 사용하여 더욱 간편하게 가독성있는 코드를 작성할 수 있다.
async와 await의 사용법은 매우 간단하다.
async
를 붙이면 해당 함수는 자동으로 프로미스를 반환하게 된다.await
를 붙이면 해당 프로미스가 끝날때까지 기다린다. (동기적으로 처리)await
는 async
가 붙은 함수 안에서만 사용 가능하다.async function 함수명() {
await 비동기_처리_메서드_명();
}
먼저 함수의 앞에 async
라는 예약어를 붙이고 함수의 내부 로직 중 HTTP 통신
을 하는 비동기 처리 코드 앞에 await
를 붙인다.
❗ 이때, 비동기 처리 메서드가 꼭
프로미스 객체
를 반환해야await
가 의도한 대로 동작한다!!
일반적으로 await
의 대상이 되는 비동기 처리 코드는 Axios
등 프로미스를 반환하는 API 호출 함수이다.
async function onClickSendBtn () { const submit = await createBoardApi({ variables: { writer: writer, title: title, contents: contents } }) console.log(submit) }
onClickSendBtn()
함수는 프로미스 객체를 반환하는 함수이다.
createBoardApi
는 Graphql-API를 사용하기 위한 함수이며HTTP 통신
을 실행한다.
async & await
를 사용하면 통신이 완료될 때까지 기다린 후, 콘솔 창에submit
이 보여질 것이다.이때 화살표 함수로 사용할 때는 async의 위치를 () 앞에 입력하여야 한다!
const 함수명 = async () => { await // 서버에 요청하는 코드 }
데이터를 요청하여 받아오는 작업은 실패할 수도 있다.
따라서 성공에 대한 처리
, 실패에 대한 처리
를 미리 염두에 두고 작업해야 한다.
try
로 통신을 시도해보고 실패하면 catch
로 에러를 받아올 수 있다.
try {
await createBoard({
variables: {
aaa: "훈이",
bbb: "1234",
ccc: "안녕하세요 훈이에요",
ddd: "반갑습니다"
}
})
} catch(error) {
alert(error.message) // 경고창(실패했습니다.) ==> 백엔드 개발자가 보내주는 실패 메시지
} finally {
// 성공, 실패 여부와 상관없이 무조건 마지막에 실행되는 부분
// 필요없다면 생략 가능
}
try
안에서 실행되는 코드들은 위에서 부터 한 줄 한 줄 실행되다가
실행 실패가 되면, 실패한 줄 밑의 코드는 실행되지 않고 바로catch
로 넘어가게 된다!!
async & await
에 대해 알아보았다.HTTP 통신
및API 호출
에 필수로 사용하게 될 개념이기 때문에 정확히 알아 두는게 도움이 많이 될 것 같다.
방대한 데이터 처리도 척척 로직을 짤 수 있는 프론트엔드 개발자가 될 수 있도록 잘 짚고 넘어가야겠다!