📜  JavaScript | Generator.prototype.throw() 方法(1)

📅  最后修改于: 2023-12-03 14:42:28.109000             🧑  作者: Mango

JavaScript | Generator.prototype.throw() 方法

简介

Generator.prototype.throw() 方法用于在一个生成器函数内部抛出一个错误。它会恢复生成器的执行,返回由 yield 关键字产生的下一个值,并将生成器的 done 属性设置为 true

语法
generator.throw(exception)
参数
  • exception(可选): 指定要抛出的错误对象。
返回值

Generator.prototype.throw() 方法返回由 yield 关键字产生的下一个值。如果生成器已经完成(即,没有更多的 yield 语句),则返回的值为 undefined

抛出错误

Generator.prototype.throw() 方法用于在生成器函数内部抛出错误。当抛出错误时,生成器函数会停止执行,被 try...catch 语句块或父级生成器上的 catch 语句块所捕获。如果没有捕获到错误,生成器会终止,并返回一个 { value: undefined, done: true } 对象。

以下是一个使用 Generator.prototype.throw() 方法抛出错误的示例:

function* myGenerator() {
  try {
    yield 'Hello';
    yield 'World';
  } catch (error) {
    console.log(error);
  }
}

const generator = myGenerator();

console.log(generator.next().value); // 输出:'Hello'

generator.throw(new Error('Something went wrong')); // 输出:Error: Something went wrong

在上述示例中,Generator.prototype.throw() 方法被调用,并传递了一个错误对象作为参数。错误被抛出后,被 try...catch 语句块捕获,并打印出错误信息。

示例

以下是一个使用 Generator.prototype.throw() 方法的完整示例:

function* myGenerator() {
  try {
    yield 'Hello';
    yield 'World';
  } catch (error) {
    console.log('Error:', error);
  }
  yield 'Done';
}

const generator = myGenerator();

console.log(generator.next().value); // 输出:'Hello'

generator.throw(new Error('Something went wrong')); // 输出:Error: Something went wrong

console.log(generator.next().value); // 输出:'Done'
console.log(generator.next().value); // 输出:undefined
console.log(generator.next().done); // 输出:true

在上述示例中,生成器函数 myGenerator 内部包含一个使用 try...catch 语句块处理错误的逻辑。yield 'Done' 语句在错误被抛出后仍然会被执行。最后,通过调用 generator.next() 方法多次调用,我们可以看到生成器的执行结果。

注意事项
  • 使用 Generator.prototype.throw() 方法抛出错误时,错误会被生成器函数内的 try...catch 语句块或父级生成器上的 catch 语句块所捕获。
  • 如果错误没有被捕获到,生成器会终止,并返回 { value: undefined, done: true }

以上就是 Generator.prototype.throw() 方法的介绍。在使用生成器函数时,若需要主动抛出错误并处理异常情况,Generator.prototype.throw() 方法是一个非常有用的工具。