用途:这是一份 Effect 库的错误处理与重试技能,用于在领域错误建模、错误恢复策略、基础设施错误向领域边界映射,以及为重试、退避、抖动、超时等韧性机制提供指导。适用时机包括定义领域错误与恢复策略、将基础设施错误映射到领域边界、添加重试与超时。
主要能力:用 Data.TaggedError 为每种失败模式定义独立错误类型(如 ValidationError、NotFoundError);通过 Effect.mapError 在边界把低层错误映射为领域错误;用 Effect.catchTags 按标签精确恢复,也可用 catchTag、catchIf 处理特定错误;用 Schedule.exponential、Schedule.jittered、Schedule.recurs、Schedule.compose、Schedule.whileInput 组合重试策略;用 Effect.timeout 设置超时,并结合重试限制延迟;用 Cause 捕获结构化错误(如 Cause.isInterruptedOnly)。
使用方式:按效果管道(.pipe)组合操作符,例如 program.pipe(Effect.retry(retry))、Effect.catchTags({ ValidationError: ..., NotFoundError: ... }),或用生成器配合 Effect.gen。资料建议在实现前先检索本地 Effect 源码,关键文件包括 docs/effect-source/effect/src/Effect.ts、Data.ts、Schedule.ts、Cause.ts,并给出 grep 示例,如 grep -F "catchTag" docs/effect-source/effect/src/Effect.ts、grep -F "TaggedError" docs/effect-source/effect/src/Data.ts、grep -F "exponential" docs/effect-source/effect/src/Schedule.ts。
限制与注意:资料强调为每种失败模式创建单独 TaggedError,避免通用 Error;只在边界映射低层错误;只对临时错误重试(用 Schedule.whileInput 谓词);重试需与超时结合以约束延迟;优先用 catchTags 而非宽泛 catchAll。具体安装方式与版本要求资料未提供。