Generator.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 September 2016.
Generator
实例的 throw()
方法的作用就好像一个 throw
语句被插入到生成器主体的当前暂停位置,这会通知生成器错误的情况并允许其处理错误,或者执行清理和自行关闭。
语法
js
generatorInstance.throw(exception)
参数
返回值
如果抛出的异常被 try...catch
捕获并且生成器恢复生成更多的值,它将返回一个 Object
,带有两个属性:
异常
如果抛出的错误没有被 try...catch
捕获,则传给 throw()
的 exception
将从生成器函数中抛出。
描述
throw()
方法在被调用时,可以看作是在生成器主体当前暂停的位置插入了一个 throw exception;
语句,其中 exception
是传入给 throw()
方法的异常。因此,在典型的流程中,调用 throw(exception)
将会导致生成器抛出异常。然而,如果 yield
表达式被包含在 try...finally
块中,错误可能会被捕获,并且控制流可以在错误处理后恢复,或者正常退出。
示例
使用 throw()
以下示例展示了一个简单生成器和使用 throw
方法抛出的错误。像往常一样,错误可以通过 try...catch
块捕获。
js
function* gen() {
while (true) {
try {
yield 42;
} catch (e) {
console.log("捕获到错误!");
}
}
}
const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("出现了些问题"));
// "捕获到错误!"
// { value: 42, done: false }
规范
Specification |
---|
ECMAScript Language Specification # sec-generator.prototype.throw |
浏览器兼容性
BCD tables only load in the browser