このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

SuppressedError

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

SuppressedError は、別のエラーを処理している際に発生したエラーを表すオブジェクトです。これは、using または await using を使用したリソースの破棄中に生成されます。

AggregateError と比べると、SuppressedError は 別のエラーによって抑制された単一のエラーを表すのに対し、AggregateError は無関係なエラーのリストを表します。ただし、SuppressedError が抑制されたエラーのチェーン(e.suppressed.suppressed.suppressed...)を含められます。また、cause とは意味的に異なります。なぜなら、そのエラーは別のエラーによって「引き起こされる」のではなく、別のエラーを処理している際に「発生する」からです。

SuppressedErrorError のサブクラスです。

コンストラクター

SuppressedError()

SuppressedError オブジェクトを生成します。

インスタンスプロパティ

継承元の Error からインスタンスプロパティも継承します。

これらのプロパティは SuppressedError.prototype に定義されており、すべての SuppressedError インスタンスで共有されます。

SuppressedError.prototype.constructor

インスタンスオブジェクトを生成したコンストラクター関数。SuppressedError インスタンスの場合、初期値は SuppressedError コンストラクターです。

SuppressedError.prototype.name

エラーの種類を表す名前。SuppressedError.prototype.name の初期値は "SuppressedError" です。

メモ: causesuppressed の意味論が重複するため、SuppressedErrorcause プロパティを持ちません。

これらのプロパティは各 SuppressedError インスタンスの固有のプロパティです。

error

抑制の結果としてのエラーへの参照。

suppressed

error によって抑制されたエラーへの参照。

インスタンスメソッド

Error からインスタンスメソッドを継承します。

SuppressedError のキャッチ

SuppressedError は、リソースの破棄 中にエラーが発生したときにスローされます。エラーをスローするとスコープのクリーンアップが行われ、クリーンアップ中の各 disposer は独自のエラーをスローできます。これらのエラーはすべて SuppressedError インスタンスのチェーンに収集され、元のエラーが suppressed プロパティとして、次の disposer によってスローされた新しいエラーが error プロパティとして格納されます。

js
try {
  using resource1 = {
    [Symbol.dispose]() {
      throw new Error("resource1 の破棄中にエラーが発生しました");
    },
  };
  using resource2 = {
    [Symbol.dispose]() {
      throw new Error("resource2 の破棄中にエラーが発生しました");
    },
  };
  throw new Error("元のエラー");
} catch (e) {
  console.log(e instanceof SuppressedError); // true
  console.log(e.message); // "破棄中にエラーが抑制されました"
  console.log(e.name); // "SuppressedError"
  console.log(e.error); // Error: resource1 の破棄中にエラーが発生しました
  console.log(e.suppressed); // SuppressedError: 破棄中にエラーが抑制されました
  console.log(e.suppressed.error); // Error: resource2 の破棄中にエラーが発生しました
  console.log(e.suppressed.suppressed); // Error: 元のエラー
}

チェーンは次のようになります:

       SuppressedError --suppressed--> SuppressedError --suppressed--> 元のエラー
              |                               |
            error                           error
              v                               v
resource1 の破棄中にエラーが発生しました   resource2 の破棄中にエラーが発生しました
    (破棄は後で行われます)                (破棄は先に行われます)

SuppressedError の作成

js
try {
  throw new SuppressedError(
    new Error("新しいエラー"),
    new Error("元のエラー"),
    "こんにちは",
  );
} catch (e) {
  console.log(e instanceof SuppressedError); // true
  console.log(e.message); // "こんにちは"
  console.log(e.name); // "SuppressedError"
  console.log(e.error); // Error: "新しいエラー"
  console.log(e.suppressed); // Error: "元のエラー"
}

仕様書

Specification
ECMAScript Async Explicit Resource Management
# sec-suppressederror-objects

ブラウザーの互換性

関連情報