async & await
AsyncFunction
객체를 반환하는 하나의 비동기 함수를 정의합니다. 비동기 함수는 이벤트 루프를 통해 비동기적으로 작동하는 함수로, 암시적으로Promise
를 사용하여 결과를 반환합니다.async function name([param[, param[, ... param]]]) { statements }
→ Promise의 단점을 보완해주는 비동기 처리 방식
async
- 함수 선언 시 함수 앞에
async
- promise 객체 반환
awiat
- promise 객체 앞에
await
- promise가 완료될 때까지 대기
- async 함수 내부에서만 사용 가능
사용
await 키워드를 붙인 비동기 작업이 완료될 때까지 대기했다가 다음 작업을 수행한다.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function example() {
console.log('Task 1');
await delay(3000);
console.log('Task 2');
}
example();
Promise VS async/await
Promise
getPost(postNum)
.then(postId => {
console.log('Post:', postId)
return getComments(postId)
})
.then(result => console.log('Comments:', result))
.catch(error => console.log(error));
→ promise 체이닝으로 인한 .then() 지옥
의 가능성 (가독성 저하)
→ .catch()
문을 통해 에러 핸들링
async/await
async function getResult() {
try {
const postId_result = await getPost(postNum);
const comments_result = await getComments(postId_result);
console.log("Post:", postId_result, "Comments:", comments_result);
} catch (error) {
console.log(error);
}
getResult();
→ .then()
중첩 없이 간결하게 표현 가능
→ try-catch()
문을 통해 에러 핸들링 (에러 발생 위치 알기 쉬움)
→ 비동기 작업 흐름을 명확하게 보여줌
try-catch
try {
// 예외가 발생할 수 있는 코드
const result = exampleFunction();
console.log(result);
} catch (error) {
// 오류 처리를 위한 코드
console.error('오류가 발생했습니다:', error.message);
}
try
블록 실행try
블록 내에서 예외/오류가 발생 → 해당 블록 내 코드 실행 즉시 중단, 해당catch
블록으로 이동 (try
블록 내 오류가 없을 경우catch
블록 건너뛰고 계속 진행)catch
블록 내의 코드 실행catch
블록 실행 후, 이후 프로그램 계속 진행
references
👉 https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%B2%98%EB%A6%AC-async-await