标签:Effect

共 169 篇文章带有这个标签。

Effect 的 Redacted 怎么防止密钥泄漏到日志?

密钥一旦以普通字符串进了日志就收不回来。这篇讲 Effect 的 Redacted 怎么让打印、字符串化和 JSON 序列化都只显示 redacted,以及它防不住什么。

Effect v4 里 FiberRef 去哪了?

effect@4.0.5 里 FiberRef 模块已经不存在,取代它的是 Context.Reference,一个带默认值的服务键。这篇讲它怎么定义、怎么覆盖,以及覆盖在嵌套和 fork 时的行为。

覆盖 CurrentLogAnnotations 为什么会丢注解?

直接用 provideService 覆盖 References.CurrentLogAnnotations 是整体替换,不是合并。这篇用跑过的输出说明它和 Effect.annotateLogs 的区别。

Reference 和 Service 该用哪个?

Reference 把依赖从类型里藏起来,忘记 provide 时静默用默认值。判断标准只有一条:缺失时有没有安全的默认值。

Effect 里失败了该直接重试吗?

失败就重试是个危险的默认。重试的前提是错误是暂时性的,所以顺序必须是先分类,再用 Effect.retry 的 while 谓词只重试值得重试的错误。

Effect 里怎么统一上报错误?

用 ErrorReporter 把「怎么上报」放进环境,用 ignore、severity、attributes 三个标注决定每个错误报不报、多严重、带什么上下文。附最小可运行示例。

Effect 的 HTTP 服务端报错会自动上报吗?

内置的 HTTP 服务端边界会触发 ErrorReporter:500 上报,404 不上报。但 reporter layer 必须出现在最终装配的 layer 里,用 provide 喂给路由会收不到。

ErrorReporter 里 defect 为什么也是 Info?

ErrorReporter 解析 severity 时,没有标注就一律是 Info,defect 也不例外。这篇给出后果,以及在上报器里按 cause 升级 severity 的最小做法。

Effect 的 catchTag 怎么精确捕获错误?

catchTag 按 _tag 捕获一种 failure,并让类型里的 E 随之收窄;catchTags 一次处理多种,catch 则会吞掉将来新增的错误。

Effect 的 defect 要在哪里处理?

catch 和 catchTag 碰不到 defect。这篇讲 defect 该由最外层、Effect.exit 或 catchCause 去看,以及 Effect.result 和 Effect.orDie 的区别。

Effect 的 Data.TaggedError 怎么用?

用 Data.TaggedError 给每种 failure 一个带 _tag 的类,让错误可区分、可精确捕获。也讲 Schema.TaggedError 什么时候该换上。

Effect 的 fiber 什么时候该脱离父级?

forkChild 默认让子 fiber 跟着父一起结束。需要任务跑完不受父影响时,用 forkDetach,或把子 fiber 绑到 Scope 上。讲清各自的归属和该由谁负责生命周期。

Effect 里中断和失败有什么区别?

在 Effect 里,中断是独立于失败和缺陷的第三种结局,表示有人不再需要结果。讲清它在 Exit 里的表示、为什么不该重试或上报,以及中断为什么是协作式的。