TypeScript 비동기

Promise 오류 경계

Promise의 pending, fulfilled, rejected 상태와 async 함수의 반환·예외 흐름을 같은 시간축에서 읽는다.

01

작업 시작

비동기 함수는 즉시 Promise를 반환하고 실제 결과는 나중에 상태 전이로 확정된다.

pending
02

성공 값

resolve 값은 await 표현식의 결과가 되고 then 체인의 다음 입력으로 전달된다.

fulfilled
03

실패 값

throw 또는 reject는 await 지점에서 예외처럼 드러나며 catch 경계가 필요하다.

rejected
04

동시 실행

서로 기다릴 필요가 없는 작업은 Promise.all로 시작 시점을 맞춰 대기 시간을 줄인다.

parallel
순차
앞 결과가 뒤 입력이면 await를 순서대로 둔다. 의존 없는 작업까지 순차 처리하면 latency가 합산된다.
dependency required
병렬
독립 작업은 먼저 실행하고 한 번에 기다린다. Promise.all은 하나라도 실패하면 전체가 reject된다.
fail together
오류
catch가 너무 넓으면 실패 원인이 숨는다. 입력 검증, 네트워크, 파싱 오류를 로그와 사용자 메시지에서 분리한다.
오류 경계

비동기 코드 점검

await 누락 Promise 자체를 렌더링하거나 조건문에서 truthy로 착각하지 않는다.
반환 타입 async 함수의 타입은 항상 Promise<T>로 드러난다.
cleanup finally에서 로딩 상태와 리소스 해제를 처리한다.

동시 실행 예시

const [user, posts] = await Promise.all([
  fetchUser(id),
  fetchPosts(id),
]);