Generator.prototype.throw()

**throw()** 方法是 Generator 实例的方法,它就像在生成器的主体中当前挂起的 position 插入一个 throw 语句一样,通知生成器一个错误状态,并允许它处理错误,或执行清理并关闭自身。

语法

js
generatorInstance.throw(exception)

参数

exception

要抛出的异常。 为了调试目的,将其设为 Errorinstanceof 是很有用的。

返回值

如果抛出的异常被 try...catch 捕获,并且生成器恢复到产生更多值,它将返回一个包含两个属性的 Object

done

布尔值

  • true 如果生成器函数的控制流已到达末尾。
  • false 如果生成器函数能够产生更多值。
value

从下一个 yield 表达式产生的值。

异常

如果抛出的异常未被 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 的浏览器中加载。

另请参阅