mason
mason-log.

mason

mason.

안녕하세요. mason 입니다.

javascript

Promise와 async/await.

Promise 상태, then 체인, async/await, 에러 처리, Event Loop와의 관계

Promise는 비동기 작업의 **결과(성공/실패)**를 나중에 받기 위한 객체이고, async/await는 Promise를 동기 코드처럼 읽기 쉽게 쓰는 문법입니다.

⏳ Promise 상태

Promise 상태 머신 pending fulfilled rejected

상태의미
pending아직 결과 없음
fulfilled성공, then 콜백
rejected실패, catch 콜백
  • 한 번 settled(fulfilled/rejected)되면 변경 불가
  • then새 Promise 반환 → 체이ning

⏳ async/await

async function fetchUser(id) {
  try {
    const res = await fetch(`/api/users/${id}`);
    if (!res.ok) throw new Error(res.statusText);
    return await res.json();
  } catch (e) {
    console.error(e);
    throw e;
  }
}
  • async 함수는 항상 Promise 반환

  • await는 Promise settle까지 일시 정지 (Call Stack 비우고 Microtask로 재개)

  • 병렬: Promise.all, Promise.allSettled, Promise.race

  • async 없이 await 불가

  • unhandled rejection → catch 또는 top-level handler

  • React Query, fetch wrapper는 내부적으로 Promise

🔗 참고 자료

  • Promise (MDN) — Promise 상태, then/catch, 정적 메서드 API를 정리한다.
  • Using promises (MDN) — 체이닝, 오류 처리, async/await 전환 패턴을 설명한다.
  • async function (MDN) — async 함수가 항상 Promise를 반환하는 규칙을 다룬다.
  • await (MDN) — await의 settle 대기와 재개 동작을 설명한다.