Generator.prototype.throw()
**throw()
** 方法是 Generator
实例的方法,它就像在生成器的主体中当前挂起的 position 插入一个 throw
语句一样,通知生成器一个错误状态,并允许它处理错误,或执行清理并关闭自身。
语法
js
generatorInstance.throw(exception)
参数
返回值
如果抛出的异常被 try...catch
捕获,并且生成器恢复到产生更多值,它将返回一个包含两个属性的 Object
异常
如果抛出的异常未被 try...catch
捕获,则传递给 throw()
的 exception
将从生成器函数中抛出。
描述
当调用 throw()
方法时,可以将其视为在生成器主体中当前挂起的 position 插入了一个 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 语言规范 # sec-generator.prototype.throw |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。