generator函数用function*声明,调用返回迭代器而非执行;yield暂停并传值,next()恢复执行并返回{value, done}对象;next(value)可向yield注入值;可用于协程式异步处理。

Generator 函数通过 function* 声明,配合 yield 暂停执行、next() 恢复执行,天然支持中断与恢复的流程控制。
定义生成器函数:用 function* 和 yield
生成器函数不是普通函数,调用后不立即执行,而是返回一个迭代器对象。函数体内的 yield 是暂停点,每次遇到就交出控制权,并可向外部传递值。
例如:
function* countDown() {
console.log('start');
yield 3;
console.log('after first yield');
yield 2;
yield 1;
console.log('done');
}此时 countDown() 返回的是迭代器,不会打印任何内容。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
手动控制执行:调用 next() 触发恢复
迭代器的 next() 方法启动或恢复执行,直到下一个 yield 或函数结束。它返回形如 { value: ..., done: true|false } 的对象。
- 第一次调用
next():执行到第一个yield,返回{ value: 3, done: false },并暂停 - 第二次调用:从上次暂停处继续,打印
'after first yield',再执行到第二个yield,返回{ value: 2, done: false } - 第三次调用:返回
{ value: 1, done: false } - 第四次调用:执行完剩余代码(打印
'done'),返回{ value: undefined, done: true }
向生成器传入数据:用 next(value) 向 yield 表达式注入值
yield 本身是个表达式,可以接收外部传入的值。后续 next(value) 中的 value 会成为上一个 yield 表达式的计算结果。
function* echo() {
let input = yield 'ready';
console.log('received:', input);
yield 'done';
}
<p>const it = echo();
console.log(it.next()); // { value: 'ready', done: false }
console.log(it.next('hello')); // { value: 'done', done: false },同时打印 received: hello</p>注意:首次 next() 传参会被忽略(因无上一个 yield 可接收)。
配合异步场景:用 yield 暂停,手动 resume 处理异步结果
虽然现代推荐用 async/await,但 Generator 曾是实现协程式异步的基石。原理是:遇到异步操作时 yield 出 Promise,由执行器(如 co 库或手写 runner)捕获、等待 resolve 后再 next(result) 恢复。
- 生成器内可写同步风格逻辑,但实际执行被外部调度器接管
- 每个
yield后可接 Promise,执行器自动.then(res => it.next(res)) - 错误可通过
it.throw(err)注入,匹配try/catch块
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










