catchを使ったエラーハンドリングの基本と応用をわかりやすく解説

スポンサーリンク
スポンサーリンク

catchの概要

エラーハンドリング JavaScript予約語

catch

概要 catchはJavaScriptで例外処理を行うための構文で、try...catchブロックの一部として使用されます。tryブロック内で発生したエラーをキャッチし、適切に処理するために使用されます。

わかりやすく説明 catchは「何か問題が起きたらここで処理する」という仕組みを提供します。

  • 例外処理により、プログラムの実行を中断せずに継続できます。
  • エラーの詳細情報を利用して、問題をデバッグできます。
  • エラーに応じた適切なレスポンスを返すことが可能です。

catchの基本的な使い方

以下は、try...catchを使った基本的な例です。

// 基本的なtry...catchの使用例
try {
    const result = 10 / 0; // エラーは発生しない(Infinityを返す)
    console.log(result);

    const undefinedVariable = undefinedValue; // 未定義の変数を参照しエラー発生
} catch (error) {
    console.error("エラーが発生しました:", error.message);
}
  • tryブロックで発生したエラーはcatchブロックでキャッチされます。
  • errorオブジェクトにはエラーの詳細情報(例: メッセージ)が格納されます。

エラーに応じた処理

catch内でエラータイプに応じた処理を実装することができます。

// エラータイプによる処理分岐
try {
    JSON.parse("invalid JSON"); // 無効なJSON文字列をパースしようとする
} catch (error) {
    if (error instanceof SyntaxError) {
        console.error("JSON構文エラー:", error.message);
    } else {
        console.error("予期しないエラー:", error.message);
    }
}
  • error instanceof ErrorTypeを使用してエラータイプを判別できます。
  • エラーに応じた異なる処理を実装可能です。

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

非同期関数やPromiseでもcatchを利用してエラーを処理できます。

// 非同期関数でのエラーハンドリング
async function fetchData() {
    try {
        const response = await fetch("https://invalid.url"); // 無効なURLでエラー発生
        const data = await response.json();
        console.log(data);
    } catch (error) {
        console.error("データ取得エラー:", error.message);
    }
}

fetchData();

// Promiseでのエラーハンドリング
fetch("https://invalid.url")
    .then(response => response.json())
    .catch(error => {
        console.error("Promiseエラー:", error.message);
    });
  • async/await構文ではtry...catchでエラーを処理します。
  • Promiseでは.catchメソッドでエラーをキャッチします。

注意点

  • エラーの発生箇所: tryブロック内のコードのみがcatchでキャッチされます。try外のエラーは処理されません。
  • グローバルエラーのキャッチ: window.onerrorprocess.on('uncaughtException')でキャッチ可能です(Node.jsの場合)。
  • エラーの意図的なスロー: throwキーワードを使用して意図的にエラーをスローできます。

よくある質問

Q: catchでエラーをキャッチしないケースはありますか?
A: catchは、tryブロック内で発生した同期的なエラーのみをキャッチします。非同期エラーやtry外で発生したエラーは対象外です。
Q: エラーを再スローするにはどうすればいいですか?
A: catchブロック内でthrowを使用すると、キャッチしたエラーを再スローできます。
Q: 非同期関数でエラーが発生した場合の推奨されるハンドリング方法は?
A: try...catch構文を使用するか、.catchメソッドでPromiseチェーン内でエラーを処理してください。

まとめ

catchは、JavaScriptで例外処理を行い、エラーに応じた適切なレスポンスやデバッグを可能にする重要な機能です。

  • 例外処理により、プログラムを中断せずに続行できます。
  • エラータイプを判別して適切な処理を実装可能です。
  • 非同期コードでもcatchを活用して信頼性の高いコードを実現しましょう。