知识合集

哈喽,我是颜sir,询盘自由网背后的人。做网络营销快6年,运气不错,实现了财务自由,目前全职在家钻研更多赚钱方法。在钻研过程中,我发现网上几乎找不到优质的中文资源。我深知新手入门需经历痛苦挣扎,所以创建了询盘自由网,把我知道的分享给你。

怎么用 TestSchema.Asserts 测 Effect Schema?

effect/testing 里的 TestSchema.Asserts 专门测 Schema:断言解码、编码、往返和生成器。这篇讲每个方法做什么,以及怎么搭进 vitest。

Effect 的 RateLimiter 怎么按 key 限速?

RateLimiter 是 effect/persistence 提供的按 key 限速服务。这篇讲清它的 consume 参数、两种算法、delay 与 fail 的区别,以及内存和 Redis 两种存储。

Effect 的 Latch 是倒数器吗?

熟悉 CountDownLatch 的人容易误会 Effect v4 的 Latch。它其实是一个可反复开关的闸门,这篇讲清 open、close、release、whenOpen 的语义。

Effect 怎么把 N+1 查询合并成一批?

用 Request.Class、RequestResolver 和 Effect.request,调用方仍然一个 id 查一次,底层合并成一次查询。附带 setDelay、batchN、makeGrouped、withCache 的用法。

Effect 资源清理的三种写法怎么选?

Effect 里登记资源清理有三种写法。这篇讲它们各自适合的场景,以及怎么看类型里的 Scope 判断资源有没有人负责。

acquireRelease 的获取和释放能被中断吗?

Effect.acquireRelease 的获取步骤默认不可中断,释放步骤也不会被中断,释放还不能有可预期的失败。这篇讲这些保护是什么、为什么这样设计。

Effect 的 Schedule.cron 怎么用,怎么测?

Schedule.cron 接受五段 cron 表达式,算出距离下一次触发还要等多久。它读的是 Clock,所以能被 TestClock 驱动,不用真等到整点。

effect-scan 怎么把 Effect 约定变成会失败的检查?

把「业务代码不写 try/catch、run 只在入口」这类约定变成退出码非 0 的命令,关键在三个设计:一个规则一个 owner、合同与生成物分离、信号与阻断分开。以 @yansircc/effect-scan 为例。

Schema.Class、Opaque 和 TaggedUnion 怎么选?

Effect v4 里给结构加身份有三种工具,运行时行为差别很大:TaggedClass 的守卫是 instanceof,Opaque 默认不是名义类型且只能包 Struct。这篇讲清各自的边界和选择标准。

怎么用 Schema.TaggedUnion 写订单状态机?

状态和事件各用一个 TaggedUnion,转换写成 match 加 guards 的纯函数,非法转换变成显式失败值。这篇给出完整代码,并说明同一份定义怎么导出落库格式和 JSON Schema。

toTaggedUnion 怎么给已有联合加 match 和 guards?

已经有成员 Schema,或者判别字段不叫 _tag,就用 Schema.toTaggedUnion 给普通 Union 加上 match、guards 和 discriminants。这篇讲用法、判别值重复和嵌套联合的行为。

withDecodingDefaultKey 的默认值有哪些坑?

withDecodingDefaultKey 的默认值是产出 Encoded 值的 Effect,不是 thunk,也不是 Type 值,而且每次解码都会重新求值。这篇把四个坑和对应写法讲清楚。