0Pricing
TypeScript Academy · 강의

비동기 TypeScript 코드의 오류 처리

형식이 지정된 래퍼와 유틸리티로 비동기 오류를 관리합니다.

비동기 TypeScript 코드의 오류 처리은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

비동기 함수는 오류 처리를 복잡하게 만듭니다. TypeScript는 Promise 거부를 적절히 처리하도록 보장합니다.

비동기 처리의 Try-Catch

Promise 거부를 처리하려면 await 호출을 try-catch로 감쌉니다.
async function loadUser(id: number): Promise<User> {
  try {
    return await api.getUser(id);
  } catch (err: unknown) {
    if (err instanceof Error) throw new AppError(err.message);
    throw new AppError('Unknown error');
  }
}

Promise.all 오류

Promise.all은 첫 번째 거부와 함께 거부됩니다. try-catch로 감싸야 합니다.
try {
  const [user, posts] = await Promise.all([getUser(id), getPosts(id)]);
} catch (err) { /* one or both failed */ }

Promise.allSettled

allSettled는 예외를 던지지 않고 성공과 실패를 모두 반환합니다.
const results = await Promise.allSettled([getUser(1), getPosts(1)]);
results.forEach(r => {
  if (r.status === 'fulfilled') console.log(r.value);
  else console.error(r.reason);
});

타입이 지정된 비동기 결과

명시적인 오류 처리를 위해 비동기 처리와 결과 패턴을 결합합니다.
async function safeGet<T>(fn: () => Promise<T>): Promise<Result<T>> {
  try { return { ok: true, value: await fn() }; }
  catch (e) { return { ok: false, error: e as Error }; }
}

처리되지 않은 거부

충돌을 방지하려면 Node.js에서 처리되지 않은 거부를 감시합니다.
process.on('unhandledRejection', (reason: unknown) => {
  console.error('Unhandled rejection:', reason);
  process.exit(1);
});

Promise.race를 사용한 시간 초과

Promise.race로 타입이 지정된 시간 초과 패턴을 구현합니다.
function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
  const timeout = new Promise<never>((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms));
  return Promise.race([promise, timeout]);
}

재시도 패턴

타입이 지정된 오류를 사용해 타입이 지정된 비동기 재시도를 구현합니다.
async function retry<T>(fn: () => Promise<T>, times: number): Promise<T> {
  for (let i = 0; i < times; i++) {
    try { return await fn(); } catch (e) { if (i === times - 1) throw e; }
  }
  throw new Error('Unreachable');
}

동시 실행 오류 처리

비동기 작업을 동시에 실행할 때 오류를 처리합니다.
const [userResult, postsResult] = await Promise.allSettled([
  getUser(id).then(u => ({ ok: true, value: u })).catch(e => ({ ok: false, error: e })),
  getPosts(id).then(p => ({ ok: true, value: p })).catch(e => ({ ok: false, error: e })),
]);

AsyncQueue 오류 전파

for-await를 사용하면 비동기 반복자에서 발생한 오류가 올바르게 전파됩니다.
async function* generate() {
  yield await fetchA();
  yield await fetchB(); // error here stops the loop
}
for await (const item of generate()) { process(item); }

Next.js의 타입이 지정된 오류 미들웨어

서버 작업에서 타입이 지정된 오류 경계를 사용합니다.
'use server';
async function createUser(data: CreateUserDto): Promise<Result<User>> {
  return safeGet(() => db.user.create({ data }));
}

빠른 확인

async/await 함수에서 거부된 Promise를 catch하지 않으면 어떻게 되나요?

복습

비동기 TypeScript 코드의 오류 처리: 이 주제의 핵심 개념과 실제 TypeScript 프로젝트에 적용하는 방법을 배웠습니다.

자주 묻는 질문

“비동기 TypeScript 코드의 오류 처리” 강의는 무료인가요?

네 — “비동기 TypeScript 코드의 오류 처리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“비동기 TypeScript 코드의 오류 처리”에서 뭘 배우나요?

형식이 지정된 래퍼와 유틸리티로 비동기 오류를 관리합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“비동기 TypeScript 코드의 오류 처리” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 형식이 지정된 오류 클래스 및 계층 구조
  2. Result 패턴: Ok와 Err
  3. 포착한 오류 좁히기: unknown과 Error
  4. 비동기 TypeScript 코드의 오류 처리
← TypeScript Academy(으)로 돌아가기