生成器函数通过yield关键字实现精确的暂停与恢复控制,首次next()从头执行至首个yield,后续next(value)恢复执行并使value成为上一个yield的返回值,return()和throw()可强制终止或注入错误。

生成器函数通过 yield 关键字主动让出执行权,配合 next() 方法手动推进,从而实现精确的暂停与恢复控制。
yield 是暂停的唯一触发点
yield 不是“等待”,而是“在此处暂停并返回值”。函数执行到 yield 表达式时立即暂停,把右侧表达式的值作为 next() 调用的返回对象的 value 属性;函数内部状态(如变量、执行位置)被完整保留。
- 没遇到
yield就不会暂停,哪怕有异步操作也不会自动停住 -
yield后面可以跟任意表达式,包括函数调用、Promise、甚至另一个生成器 - 首次调用
next()会从头开始执行,直到第一个yield或函数结束
next() 是 Resume 的唯一入口
每次调用生成器对象的 next() 方法,都会恢复上次暂停处的执行,并继续运行到下一个 yield 或函数返回。传入 next(value) 的参数会成为上一个 yield 表达式的返回值(即赋给 yield 左侧的变量)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 第一次
next()传参无效(因为没有上一个yield等待接收) - 后续
next(x)中的x会变成前一个yield的结果:比如let a = yield 1;,下次next(42)后,a就是42 - 如果生成器已结束(
done: true),再调用next()仍返回{ value: undefined, done: true }
return() 和 throw() 可强制终止或注入错误
除了 next(),生成器对象还提供两个方法用于干预执行流:
-
return(value):立即结束生成器,跳过后续yield,返回{ value, done: true };不会触发finally块(如果有) -
throw(error):在暂停位置抛出错误,可被生成器内部的try...catch捕获;若未捕获,则生成器终止 - 这两个方法也遵循“恢复执行 → 立即中断”的逻辑,不是异步调度,不依赖事件循环
实际暂停控制常结合异步逻辑
生成器本身不处理异步,但可通过手动协调实现“暂停等待异步完成”:
- 常见做法是
yield一个 Promise,外部调用者拿到后.then()再调用next() - 也可以封装成类似
co或async/await的自动执行器,遍历yield出的 Promise 并链式调用next - 注意:仅
yield Promise不会让生成器自动等待 —— 必须由调用方显式处理 Promise 完成后再推进
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










