Effect 怎么把 N+1 查询合并成一批?
用 Request.Class、RequestResolver 和 Effect.request,调用方仍然一个 id 查一次,底层合并成一次查询。附带 setDelay、batchN、makeGrouped、withCache 的用法。
共 169 篇文章带有这个标签。
用 Request.Class、RequestResolver 和 Effect.request,调用方仍然一个 id 查一次,底层合并成一次查询。附带 setDelay、batchN、makeGrouped、withCache 的用法。
Cache.makeWith 的 timeToLive 接收查找结果的 Exit,成功缓存十分钟、失败只缓存五秒。附 TestClock 验证写法,以及 RequestResolver.asCache。
请求错开几毫秒到达时默认各自成批。用 setDelay 加收集窗口,用 batchN 限制批大小,用 makeGrouped 按 key 分组。
ScopedCache 的条目过期是惰性的:过期后没有再被访问,finalizer 不会执行。用 TestClock 逐步演示 open、close 的顺序。
Effect 里登记资源清理有三种写法。这篇讲它们各自适合的场景,以及怎么看类型里的 Scope 判断资源有没有人负责。
Effect.acquireRelease 的获取步骤默认不可中断,释放步骤也不会被中断,释放还不能有可预期的失败。这篇讲这些保护是什么、为什么这样设计。
Schedule.cron 接受五段 cron 表达式,算出距离下一次触发还要等多久。它读的是 Clock,所以能被 TestClock 驱动,不用真等到整点。
把「业务代码不写 try/catch、run 只在入口」这类约定变成退出码非 0 的命令,关键在三个设计:一个规则一个 owner、合同与生成物分离、信号与阻断分开。以 @yansircc/effect-scan 为例。
Schema 默认遇到第一个错误就停,表单类接口需要把所有字段的问题一起交给调用方。这篇讲 errors "all" 选项,以及怎么把 SchemaError 压平成带路径的领域错误。
用 Effect v4 的 Schema.TaggedUnion 一次定义订单这类多状态数据,自带解码、match、guards 和穷尽检查。这篇讲定义写法和三个工具各检查什么。
Effect v4 里给结构加身份有三种工具,运行时行为差别很大:TaggedClass 的守卫是 instanceof,Opaque 默认不是名义类型且只能包 Struct。这篇讲清各自的边界和选择标准。
状态和事件各用一个 TaggedUnion,转换写成 match 加 guards 的纯函数,非法转换变成显式失败值。这篇给出完整代码,并说明同一份定义怎么导出落库格式和 JSON Schema。
已经有成员 Schema,或者判别字段不叫 _tag,就用 Schema.toTaggedUnion 给普通 Union 加上 match、guards 和 discriminants。这篇讲用法、判别值重复和嵌套联合的行为。
Effect v4 里一份 Schema 可以派生 Standard Schema、JSON 编解码器、JSON Schema、Equivalence、Formatter 和 JSON Patch。这篇逐个讲它们各解决什么、边界在哪。
withDecodingDefaultKey 的默认值是产出 Encoded 值的 Effect,不是 thunk,也不是 Type 值,而且每次解码都会重新求值。这篇把四个坑和对应写法讲清楚。
用 Schema 的 check 给类型附加约束,比如 1 到 150 的整数、非空字符串、符合正则的邮箱。约束在解码时一并检查。
Schema.Struct 解码时默认剔除未声明的字段。想严格拒绝多余字段,解码时传入 onExcessProperty 选项;想保留,就在 Schema 里声明。
用 Schema.brand 给形状相同的值不同的类型身份,让用户 ID 不能当订单 ID 传;以及 brand 叠在校验上、它的保证边界和适用范围。
用 Schema.TaggedStruct 与 Schema.Union 把带可选字段的状态对象拆成判别联合,用 Schema.Literals 表达有限取值,并说明它与 TaggedError 的关系。
用 Schema.decodeTo 搭配 SchemaTransformation.transform,给出解码与编码两个方向,把外部表示转成内部类型;并说明转换里为什么不该做 IO。