Event Loop

비동기 코드는 완료 시점에 다시 콜 스택으로 돌아온다

`setTimeout`, Promise, `await`은 자바스크립트 실행을 멈추는 명령이 아니라, 오래 걸리는 일을 맡기고 완료 후 실행할 일을 큐에 예약하는 방식입니다.

동기 코드

콜 스택에서 바로 끝난다

`console.log`처럼 즉시 실행되는 코드는 순서대로 완료되어 다음 줄로 넘어갑니다.

Callback

타이머 완료 후 큐에 들어간다

`setTimeout` 콜백은 대기 시간이 지난 뒤 태스크 큐에서 차례를 기다립니다.

Promise

then과 catch는 마이크로태스크다

Promise 후속 처리는 일반 태스크보다 먼저 처리되어 체인 흐름을 빠르게 이어갑니다.

await

async 함수 내부만 잠시 멈춘다

바깥 코드는 계속 실행되고, Promise가 이행되면 멈춘 지점 다음부터 이어집니다.

실패 경로

거부된 Promise는 catch로 모은다

`try/catch`는 `await` 지점에서 거부된 Promise를 예외 흐름으로 받아 성공 경로와 실패 경로를 같은 블록 안에서 분기합니다.

React

완료 결과를 state에 반영한다

서버 응답이 도착하면 상태를 바꾸고, React는 그 결과로 화면을 다시 계산합니다.

stack호출 실행
Web API작업 대기
queue콜백 예약
stack다시 실행
state화면 갱신

읽는 포인트 비동기 문법은 기다리는 동안 앱을 멈추지 않기 위한 표현입니다. 출력 순서를 이해하려면 코드 줄보다 실행 장소와 큐의 차례를 함께 봐야 합니다.