生成器函数为异步流程控制提供底层机制支撑,通过yield暂停/恢复并保持状态,由外部runner解耦调度逻辑,实现线性、可调试、兼容旧环境的异步编程。

ES6 生成器函数本身不自动执行异步逻辑,但为自执行异步流程控制提供了底层机制支撑——它的核心价值在于把“何时暂停、何时恢复、传什么值”交由外部调度器精确掌控,从而实现高度可定制的异步流管理。
天然支持分步执行与状态保持
生成器函数每次遇到 yield 就暂停,并完整保留局部变量、执行位置和调用栈状态。下一次 next() 调用时从中断处继续,无需手动维护上下文。
- 普通函数返回后状态即销毁,而生成器可多次中断/恢复,适合多阶段异步任务(如:登录 → 获取用户数据 → 加载权限 → 渲染界面)
- 每个 yield 表达式可返回任意值(包括 Promise),为外部 runner 提供明确的“下一步该处理什么”的信号
解耦异步操作与流程调度
生成器只负责定义步骤顺序和数据流向,不关心如何等待 Promise、如何捕获错误、是否重试或并发限制——这些都由独立的 runner(如 co 库或自定义执行器)统一处理。
- 同一生成器函数可搭配不同 runner:一个用于调试(逐次 next),一个用于生产(自动 resolve/reject 处理)
- 便于注入中间逻辑:比如在每次恢复前自动添加 loading 状态、日志记录或权限校验
结构清晰,接近同步语义
相比嵌套回调或长链 .then(),生成器将异步步骤平铺为线性代码,逻辑更贴近人类阅读习惯,也更容易配合 try/catch 做错误边界控制。
- 可在 yield 前后直接使用 try...catch 捕获异步操作抛出的异常,错误处理位置直观
- 避免 Promise 链断裂导致的 silent fail,runner 可统一决定是调用 throw() 还是 next() 继续
轻量可控,不依赖运行时特性
生成器是语言级原生机制,不依赖全局 Promise polyfill 或 async/await 支持,适合需要兼容旧环境(如 Node.js 0.12+、IE11 + Babel)的项目。
- 只需一个小型 runner 函数(几十行代码),就能驱动整个异步流程
- 比手写 Promise 链更易调试:每步 yield 对应一个明确的暂停点,便于打点、拦截或模拟延迟


















