AsyncGenerator.prototype.throw()
throw() は AsyncGenerator インスタンスのメソッドで、あたかも throw 文がジェネレーター本体の中の停止中の位置に挿入されたかのように動作し、エラー状態をジェネレーターに通知して、エラーを処理するか、クリーンアップを実行してそれ自身を閉じることができます。
構文
js
asyncGeneratorObject.throw(exception)
引数
exception-
発生される例外。デバッグの用途では、
instanceofErrorにすると便利です。
返値
発生したエラーを捕捉できない場合は、渡された例外で拒否する 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 Language Specification # sec-asyncgenerator-prototype-throw |
ブラウザーの互換性
BCD tables only load in the browser