AsyncGenerator.prototype.throw()

**throw()** 方法是 AsyncGenerator 实例的方法,它的作用相当于在生成器的主体中当前挂起的位置插入一个 throw 语句,这会将错误条件告知生成器,并允许它处理错误,或执行清理并关闭自身。

语法

js
asyncGeneratorInstance.throw(exception)

参数

exception

要抛出的异常。为了调试目的,将它设置为 instanceof Error 会很有用。

返回值

如果抛出的错误未被捕获,它将返回一个 Promise,该 Promise 将使用传入的异常拒绝。

如果异常被 try...catch 捕获,并且生成器恢复以产生更多值,它将返回一个 Promise,该 Promise 解析为一个带有两个属性的 Object

done

布尔值

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

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

示例

使用 throw()

以下示例展示了一个简单的生成器和使用 throw 方法抛出的错误。错误可以像往常一样被 try...catch 块捕获。

js
// An async task. Pretend it's doing something more useful
// in practice.
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 }

规范

规范
ECMAScript 语言规范
# sec-asyncgenerator-prototype-throw

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅