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)
引数
返値
発生したエラーを捕捉できない場合は、渡された例外で拒否する Promise を返します。
例外が try...catch で捉えられ、再開してジェネレーターが次の値を生成すると、次の 2 つのプロパティを持つ Object で解決する Promise を返します。
例
>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> |
ブラウザーの互換性
Loading…