You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

此模式下抛出错误后,Generator函数能否继续执行?

生成器函数抛出错误后是否会继续执行后续代码?

我原本认为生成器函数里抛出错误后,后续代码不会执行,测试结果也符合这个认知,但又有点不确定,甚至怀疑自己是不是错了。

项目里遇到个怪事:某个生成器函数好像在抛出一次错误后还继续执行了,但我没法复现这个场景,代码里也找不到问题,所以来确认这个点。

function* someMethod(i) {
  try {
    yield i;
    throw new Error('error text');
    yield call(anotherMethod); // << 这行应该永远不会执行,对吧?
  } catch (err) {
    console.error(err);
  }
}

结论与分析

针对你提供的这段代码,yield call(anotherMethod);确实永远不会执行。原因很明确:throw new Error('error text');执行后,代码会立即跳转到对应的catch块,跳过throw语句之后的所有代码,所以这行yield根本没有执行的机会。

至于你项目中遇到的异常情况,可能的诱因包括:

  • 外部代码调用了生成器的generator.throw()方法:这种情况下,生成器内部的catch块捕获错误后,如果后续还有可执行的yield语句,生成器是可以恢复执行的
  • 错误被外层的try/catch结构捕获:如果生成器内部的错误没有中断当前执行流程,可能导致后续代码意外运行
  • 异步场景下的逻辑漏洞:如果生成器结合了异步操作,错误处理的时序问题可能造成“错误后仍执行”的假象

内容的提问来源于stack exchange,提问作者Slbox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:30:50