ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript デバッグの隠れた宝石: error.cause

JavaScript デバッグの隠れた宝石: error.cause

DDD
リリース: 2025-01-12 16:45:47
オリジナル
686 人が閲覧しました

A Hidden Gem in JavaScript Debugging: error.cause

デバッグの課題

デバッグにおける最大の課題は何ですか?その 1 つは間違いなくエラーの原因を追跡することです。

次のシナリオを想像してください:

const func = () => {
  doSth('A');
  doSth('B');
};
ログイン後にコピー
ログイン後にコピー

func がエラーをスローした場合、どのステップでエラーが発生したかをどのように特定しますか? doSth('A')、doSth('B')、または func 自体が原因でしたか?明らかに、エラーには十分なコンテキストが不足しています。

一般的なソリューション

この問題に対処する一般的なアプローチは次のようになります:

const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', error);
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', error);
  }
};
ログイン後にコピー
ログイン後にコピー

このアプローチを使用すると、エラーの原因をより簡単に特定できます。ただし、このソリューションにはいくつかの制限があります。

  1. 損失エラーの詳細:

    エラーに広範な情報 (ペイロード、HTTP ステータス コード、エラー コードなど) が含まれている場合、このアプローチでは、新しく構築されたエラーに doSth のエラー メッセージが追加されるだけです。元のスタック トレースを含むその他の重要な詳細は失われます。

  2. ログの可読性の低下:

    潜在的なエラー ポイントが 2 つ以上あると、ログが乱雑になり、解釈が難しくなる可能性があります。

  3. 意図表現のあいまいさ:

    このコードでは、新しいエラーがキャッチされた特定の doSth 関数によって引き起こされることを明示的に伝えていないため、コードの可読性を向上させる余地が残されています。

error.cause の紹介

これらの問題に対処するために、ECMAScript 2022 では error.cause が導入されました。

この機能を使用すると、開発者は新しいエラー オブジェクトを作成するときにエラーの根本原因を指定できます。 error.cause を使用すると、エラーの連鎖を確立でき、問題の根本原因のデバッグと追跡が容易になります。

これは簡単な例です:

try {
  // Some operation that may throw an error
} catch (error) {
  throw new Error('Something went wrong', { cause: error });
}
ログイン後にコピー

このアプローチを使用すると、エラー間の因果関係を構築できます。例:

const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', { cause: error });
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', { cause: error });
  }
};
ログイン後にコピー

これにより、下位レベルの関数 (例: doSth('A')) によってスローされたエラーをキャッチし、関連するコンテキストを追加する新しいエラー (例: 「doSth('A') の実行中にエラーが発生しました」) をスローできるようになります。 )、元のエラーの詳細(例:「A は不正な引数です。」)を保持します。

エラーの連鎖を構築する

error.cause のもう 1 つの利点は、リンクされたエラーのチェーンを作成でき、開発者がアプリケーションの複数の層を通じて問題を追跡できることです。

const func = () => {
  try {
    try {
      try {
        doSth('A');
      } catch (error) {
        throw new Error('Error at depth 3', { cause: error });
      }
    } catch (error) {
      throw new Error('Error at depth 2', { cause: error });
    }
  } catch (error) {
    throw new Error('Error at depth 1', { cause: error });
  }
};

console.log(error.cause.cause); // Error at depth 3
ログイン後にコピー

Node.js では、原因のあるエラーはコンソールで特別に処理されます。関連するすべてのエラー スタックが出力されます:

const func = () => {
  doSth('A');
  doSth('B');
};
ログイン後にコピー
ログイン後にコピー

結論

  • エラーのコンテキストと詳細の両方にすぐにアクセスできると、デバッグが大幅に簡単になります。
  • これを達成する効果的な方法の 1 つは、error.cause 機能を使用して「コンテキストを使用して再スローをキャッチ」パターンを採用することです。
const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', error);
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', error);
  }
};
ログイン後にコピー
ログイン後にコピー

このアプローチにより、エラーの追跡可能性が向上するだけでなく、コードの可読性と保守性も向上します。


私たちは Leapcell であり、Node.js プロジェクトをクラウドにデプロイするための最良の選択肢です。

A Hidden Gem in JavaScript Debugging: error.cause

Leapcell は、Web ホスティング、非同期タスク、Redis 用の次世代サーバーレス プラットフォームです:

多言語サポート

  • Node.js、Python、Go、または Rust を使用して開発します。

無制限のプロジェクトを無料でデプロイ

  • 使用料金のみお支払いください。リクエストや料金はかかりません。

比類のないコスト効率

  • アイドル料金なしの従量課金制です。
  • 例: $25 は、平均応答時間 60 ミリ秒で 694 万のリクエストをサポートします。

効率化された開発者エクスペリエンス

  • 直感的な UI でセットアップが簡単です。
  • 完全に自動化された CI/CD パイプラインと GitOps の統合。
  • 実用的な洞察を得るリアルタイムのメトリクスとログ。

簡単な拡張性と高いパフォーマンス

  • 自動スケーリングにより、高い同時実行性を簡単に処理できます。
  • 運用上のオーバーヘッドがゼロ - 構築だけに集中できます。

ドキュメントでさらに詳しく見てみましょう!

A Hidden Gem in JavaScript Debugging: error.cause

X でフォローしてください: @LeapcellHQ


ブログをお読みください

以上がJavaScript デバッグの隠れた宝石: error.causeの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート