0Pricing
TypeScript Academy · レッスン

非同期TypeScriptコードのエラーハンドリング

型付きのラッパーとユーティリティで非同期エラーを管理します。

「非同期TypeScriptコードのエラーハンドリング」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

ようこそ

非同期関数では、エラーハンドリングが複雑になります。TypeScriptは、Promiseの拒否を適切に処理するよう促します。

Async/Awaitの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は最初に発生した拒否でrejectされます。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);
});

型付き非同期Result

非同期処理とResultパターンを組み合わせて、エラー処理を明示的にします。
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の型付きエラーミドルウェア

Server Actionsで型付きのエラーバウンダリーを使用します。
'use server';
async function createUser(data: CreateUserDto): Promise<Result<User>> {
  return safeGet(() => db.user.create({ data }));
}

確認問題

async/await関数でrejectされたPromiseをcatchしないと、どうなりますか?

まとめ

TypeScriptの非同期コードにおけるエラーハンドリング:このトピックの重要な概念と、実際のTypeScriptプロジェクトでの適用方法を学びました。

よくある質問

「非同期TypeScriptコードのエラーハンドリング」レッスンは無料ですか?

はい。「非同期TypeScriptコードのエラーハンドリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「非同期TypeScriptコードのエラーハンドリング」で何を学びますか?

型付きのラッパーとユーティリティで非同期エラーを管理します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「非同期TypeScriptコードのエラーハンドリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 型付きErrorクラスと階層
  2. Resultパターン:OkとErr
  3. 捕捉したErrorのナローイング(unknownとError)
  4. 非同期TypeScriptコードのエラーハンドリング
← TypeScript Academyに戻る