Generator.prototype.throw()
throw() 方法用于 实例,它会在生成器的当前暂停位置插入一个 Generatorthrow 语句,告知生成器发生错误,并允许其处理错误、执行清理或关闭自身。
语法
js
generatorInstance.throw(exception)
参数
返回值
如果抛出的异常被 try...catch 捕获,并且生成器恢复执行以产生更多值,它将返回一个具有两个属性的 Object。
异常
TypeError-
如果生成器已在运行,则抛出错误。
如果 exception 未在生成器函数内的 try...catch 块中捕获,它也将被抛给 throw() 的调用者。
描述
调用 throw() 方法时,可以将其视为在生成器的当前暂停位置插入了一个 throw exception; 语句,其中 exception 是传递给 throw() 方法的异常。因此,在典型流程中,调用 throw(exception) 将导致生成器抛出异常。但是,如果 yield 表达式被包含在 try...catch 块中,则错误可能会被捕获,并且控制流可以在错误处理后恢复,或者优雅地退出。
示例
使用 throw()
以下示例展示了一个生成器以及使用 throw 方法抛出的错误。错误可以像往常一样被 try...catch 块捕获。
js
function* gen() {
while (true) {
try {
yield 42;
} catch (e) {
console.log("Error caught!");
}
}
}
const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-generator.prototype.throw |
浏览器兼容性
加载中…