用对象字面量重构generator状态逻辑,是将隐式控制流显式收束为可读、可查、可维护的状态映射;通过具名字段(如fetchinguser)、结构化值、初始化默认值、状态驱动yield、错误与回退内聚管理及解构降噪,使“当前步骤”“下一步动作”“失败回退”一目了然。

用对象字面量重构 Generator 的状态逻辑,核心是把隐式、分散、靠 yield 和 next() 传递的控制流,显式收束为可读、可查、可维护的状态映射。不是为了炫技,而是让“当前在哪个步骤”“下一步该做什么”“失败时退到哪”一目了然。
把 yield 步骤映射为具名状态字段
Generator 内部常靠顺序执行和临时变量记录进度,容易失焦。改用对象字面量提前声明所有关键状态节点,每个字段对应一个明确语义的中间态:
- 字段名用动词短语(如
fetchingUser、validatingToken),不叫step1或state2 - 值可为布尔、字符串、函数或 { done: boolean, error?: string } 等结构,避免仅靠
true/false表意模糊 - 初始化时统一置为初始值(如
false或null),不依赖执行顺序推断“默认状态”
用状态对象驱动 yield 流程,而非靠 next() 调用节奏硬编码
传统写法常在 Generator 里写一堆 if (this.step === 'A') yield ... else if (this.step === 'B') ...,耦合严重。改为:Generator 只负责“读取当前状态 → 执行对应动作 → 更新状态对象 → yield 结果”,逻辑主干清晰:
- 把状态对象作为参数传入 Generator,或挂载在上下文(如
this.state)上 - 每次
next()不再“猜下一步”,而是根据state.currentPhase查表执行预定义行为 - 状态变更(如
state.currentPhase = 'submitted')显式发生在业务逻辑后,不依赖 yield 次序隐式推进
错误与回退路径也纳入状态对象统一管理
Generator 中异常处理常散落在各 try/catch 块里,回退逻辑难追踪。将错误态和恢复策略作为状态字段内聚管理:
- 设
state.error记录最近错误,state.recoverable标识是否支持重试 - 设
state.previousPhase在进入新阶段前自动保存,出错时一键还原(state.currentPhase = state.previousPhase) - 避免在 catch 里手动调
generator.return()或重新next(),改由状态机自动响应state.error !== null
配合解构与默认值,降低状态访问噪声
频繁写 state.user?.profile?.avatar 或 state.config?.timeout ?? 5000 会稀释主逻辑。利用对象字面量 + 解构 + 默认值提前收敛不确定性:
- 在 Generator 启动时,用解构从原始状态对象提取必需字段,并赋予合理默认值:
const { user = {}, config = { timeout: 5000 } } = state; - 对嵌套结构,用嵌套解构 + 默认空对象防报错:
const { avatar = '/default.png' } = user?.profile ?? {}; - 把“状态校验逻辑”(如
if (!user.id))提前封装进初始化解构表达式,不在 yield 主体中重复判断
不复杂但容易忽略:对象字面量本身不执行逻辑,它只是让状态变得“可命名、可定位、可快照”。Generator 的职责就回归本质——按需响应状态,而不是自己当状态管家。










