LAYER 02 · 掌握组合语法

Effect 与 Fiber:让卸载真正完成

同步注册需要撤销函数,异步工作需要停稳协议;两者缺一不可

16 min3 处源码锚点upstream@47f9438
register → disposer · start → stop → join
本章要解决的问题

调用 AbortController.abort(),为什么不等于插件已经卸载?

先建立直觉

关店不只是挂出“停止营业”:还要停止接单、让厨房收尾、清点设备、归还钥匙,并确认没有员工留在里面。

MECHANISM

机制拆解

Effect 记录服务注册、监听器、计时器等可同步撤销的副作用;插件 Context dispose 时按所有权逆向执行 disposer。

Fiber 拥有持续或异步工作:先请求停止,再等待 done;只有完全停稳后,依赖它的世界才能安全拆除。

第 1 步 / 共 5 步

登记副作用

每次注册都返回并归属一个 disposer。

INVARIANTS

无论怎么扩展,都不能破坏

  • 请求停止与确认停稳是两个不同阶段
  • dispose 必须幂等
  • 依赖方必须在提供方服务撤销前停止
FAILURE MODES

最容易踩中的坑

  • ×fire-and-forget 后台 Promise
  • ×只 clearInterval 却不等待当前 tick
  • ×在 disposer 中抛错导致后续资源无法回收
VERIFY IN SOURCE

不要相信结论,去源码里复核

以下链接固定到官方 deepseek-harness@47f9438;查看当前上游时请留意后续 breaking changes。

KNOWLEDGE CHECK

先停十秒,再揭晓答案

为什么 HMR 最容易暴露生命周期 bug?

为什么下一章紧接在这里

有了可靠生命周期,服务与事件才能成为稳定的协作协议。

Learn DeepSeek Harness

独立教学项目。解释力来自源码,判断边界以官方仓库为准。