Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Effect v4 RC 学习 Demo

这是一个尽量小、可直接运行的 Effect v4 release candidate 示例项目。示例只依赖核心包 effect@rc,所有代码集中在 src/index.ts,并配有中文注释,适合按区块阅读和改动。

当前安装到的 RC 版本由 effect@rc 决定。Effect v4 要求 TypeScript 5.9+、Node.js 18+,并要求开启严格类型检查。

运行

npm install
npm run dev       # 执行所有演示
npm run check     # 只做类型检查
npm run build     # 编译到 dist/

阅读顺序

  1. Effect.succeed、map、flatMap:Effect 是惰性的可组合计算。
  2. Data.TaggedError、catchTag:把业务失败放进类型通道。
  3. Schema.Struct、decodeUnknownEffect:在 unknown 边界完成运行时校验和类型收窄。
  4. Context.Service、Layer、Effect.provide:业务代码声明依赖,入口提供实现。
  5. Effect.all、race、forkChild、Fiber.join:并发和结构化 Fiber 生命周期。
  6. Schedule.recurs、retry、timeout:可组合的重试策略和超时中断。
  7. acquireRelease、scoped:资源成功、失败、中断时都能清理。
  8. Stream:惰性、逐项的数据流处理。
  9. Ref:并发安全的原子状态更新。
  10. Effect.logInfo、日志注解、Metric.counter:最小可观测性示例。

Effect 类型怎么读

Effect<A, E, R>:

  • A:成功值(Success)。
  • E:可恢复的业务错误(Error)。never 表示不会失败。
  • R:运行时需要的服务(Requirements)。never 表示不依赖外部服务。

例如:

Effect.Effect<User, RepositoryError | Schema.SchemaError, UserRepository>

表示这个程序成功返回 User,可能失败为两种错误,并要求 UserRepository 服务。

建议练习

  • 把 servicesDemo 中的用户 ID 从 1 改成 0,观察 RepositoryError 的恢复分支。
  • 把 schemaDemo 的输入字段改错,观察 Schema 的错误消息。
  • 把并发任务的延迟改大,观察 race 的胜者和 all 的结果顺序。
  • 让 flaky 在第 6 次才成功,观察 Schedule.recurs(5) 的边界。
  • 在资源 demo 中让使用阶段失败,确认 release 仍然执行。
  • 给 Stream 增加 Stream.mapEffect 或 Stream.runForEach,练习逐项异步处理。

官方资料

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages