javascript
Promise와 async/await.
Promise 상태, then 체인, async/await, 에러 처리, Event Loop와의 관계
Promise는 비동기 작업의 **결과(성공/실패)**를 나중에 받기 위한 객체이고, async/await는 Promise를 동기 코드처럼 읽기 쉽게 쓰는 문법입니다.
⏳ Promise 상태
| 상태 | 의미 |
|---|---|
| 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 대기와 재개 동작을 설명한다.
