호출된 함수가 실행을 완료할 때까지 대기한 후 다음 코드를 실행하는 방식
함수가 실행되면 즉시 반환되고, 나중에 결과를 받을 수 있는 방식
Non-Blocking 방식은 작업이 끝났는지 확인하는 방법이 필요하다.
Polling과 Event 기반 실행이 있다.
일정 간격으로 상태를 확인하는 방법
http요청이 이 방식에 해당한다.작업이 끝나면 자동으로 특정 함수를 호출하는 방식
event 방식은 콜백지옥이 발생할 수 있다.비동기 코드가 여러 개 중첩되면서 코드가 복잡해지는 현상이다.
코드가 계단식으로 중첩되어 가독성이 나빠지고 에러 처리가 복잡해진다.
step1(() => {
step2(() => {
step3(() => {
console.log("모든 작업 완료");
});
});
});
해결 방법으로 async/await을 사용한다.
이 방법을 사용하면 비동기 코드를 더 가독성 좋고 직관적으로 사용할 수 있다.
비동기 함수임을 선언하는 키워드
async 키워드를 함수 앞에 붙이면 해당 함수는 무조건 promise를 반환한다.async 함수 내부에서 await을 사용할 수 있다.비동기 함수 내부에서 promise가 처리될 때까지 기다리는 키워드
await 키워드는 async 함수 내부에서만 사용 가능하다.then() 체인 방식보다 가독성이 뛰어나다. 에제)
async function fetchUser() {
console.log("유저 데이터 가져오는 중...");
let user = await new Promise(
resolve => setTimeout(() => resolve({ name: "이름", age: 27 }), 2000)
);
console.log("유저 데이터:", user);
}
console.log("시작!");
fetchUser();
console.log("다른 작업 실행 중...");
출력결과
시작!
유저 데이터 가져오는 중...
다른 작업 실행 중...
(2초 후)
유저 데이터: { name: '이름', age: 27 }
