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

View in English Always switch to English

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 ⁨2020年1月⁩.

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® 2026 Language Specification
# sec-asyncgenerator-prototype-throw

ブラウザーの互換性

関連情報