AsyncGenerator.prototype.throw()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

throw()AsyncGenerator インスタンスのメソッドで、あたかも throw 文がジェネレーター本体の中の停止中の位置に挿入されたかのように動作し、エラー状態をジェネレーターに通知して、エラーを処理するか、クリーンアップを実行してそれ自身を閉じることができます。

構文

js
asyncGeneratorObject.throw(exception)

引数

exception

発生される例外。デバッグの用途では、instanceof Error にすると便利です。

返値

発生したエラーを捕捉できない場合は、渡された例外で拒否する Promise を返します。

例外が try...catch で捉えられ、再開してジェネレーターが次の値を生成すると、次の 2 つのプロパティを持つ Object で解決する Promise を返します。

done

論理値です。

  • true: このジェネレーター関数の制御フローが最後まで達した場合。
  • false: このジェネレーターが次の値を生成することができる場合。
value

次の yield 式で生成される値。

throw() の使用

次の例では、単純なジェネレーターと、throw メソッドを使用して発生したエラーについて示します。エラーは、通常通り try...catch ブロックで捕らえることができます。

js
// 非同期タスクです。実際にはもっと有益なことを使用していることを
// 想定してください。
function sleep(time) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time);
  });
}

async function* createAsyncGenerator() {
  while (true) {
    try {
      await sleep(500);
      yield 42;
    } catch (e) {
      console.error(e);
    }
  }
}

const asyncGen = createAsyncGenerator();
asyncGen.next(1).then((res) => console.log(res)); // { value: 42, done: false }
asyncGen
  .throw(new Error("Something went wrong")) // Error: Something went wrong
  .then((res) => console.log(res)); // { value: 42, done: false }

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-asyncgenerator-prototype-throw

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
throw

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報