X Tutup

このページはコミュニティーの尽力で英語から翻訳されました。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

ブラウザーの互換性

関連情報

X Tutup