JavaScript:
エラー処理

どうやって:

ここに古典的な try-catch ブロックがあります。

try {
  // エラーを投げる可能性のあるコード
  let result = potentiallyRiskyOperation();
  console.log('成功:', result);
} catch (error) {
  // エラーが投げられた場合の対応
  console.error('おっと:', error.message);
}

エラーが発生しない場合のサンプル出力:

成功: 42

エラーがある場合:

おっと: 何かがうまくいかなかった

プロミスが関与する非同期コードでは、async 関数の中で try-catch を使用します:

async function fetchData() {
  try {
    let data = await fetch('https://api.example.com/data');
    console.log('データを取得:', data);
  } catch (error) {
    console.error('データ取得エラー:', error.message);
  }
}

fetchData();

深掘り

JavaScriptのエラーハンドリングは進化しています。昔(ES3, 1999年頃)にはtry-catchブロックだけでした。あまり柔軟ではありませんでしたが、仕事はできました。

ES6(2015年)がプロミスを導入し、非同期エラーをより上品に扱う .then().catch() を私たちに与えました。

fetch('https://api.example.com/data')
  .then(data => console.log('データを取得:', data))
  .catch(error => console.error('データ取得エラー:', error.message));

実装の詳細について言えば、エラーが投げられると、JavaScriptエンジンはmessagestackなどの有用なプロパティを持つErrorオブジェクトを作成します。複雑なアプリで便利なのは、Errorクラスを拡張してカスタムエラータイプを作成することもできます。

代替案?エラーハンドリングを無視する(悪いアイデア)、エラー優先のパラメータでコールバックを使用する(こんにちは、Node.jsスタイル)、または自分たちのテイクを提供するライブラリやフレームワークを使って更に洗練されたことをする、などがあります。

参照

エラーハンドリングについての詳細は: