SuperAPI AI 工具集

effect-ts-resources

编程与开发

查看项目

更新于 10-16 01:29

技能介绍

用途:在 Effect-TS 中管理需要显式释放的资源生命周期,确保清理逻辑始终执行,即使程序失败、抛错或被中断。适用症状包括资源泄漏(连接挂起)、手写 try/finally、清理逻辑复杂;触发场景包括打开文件、连接数据库、启动服务器、获取锁。简单数据转换或无需显式关闭的值不适用。

主要能力:Effect.acquireRelease 定义获取与保证释放逻辑;Effect.scoped 创建作用域边界,范围结束时释放全部资源;Effect.addFinalizer 向当前作用域添加清理动作。多个资源共享生命周期边界,按 LIFO(后进先出)顺序释放。

用法示例:数据库连接可用 Effect.acquireRelease(Effect.tryPromise(() => pool.connect()), (connection) => Effect.sync(() => connection.release()));scoped 用 Effect.scoped(Effect.gen(...)) 包裹多个受管资源;文件处理用 Effect.acquireRelease(Effect.tryPromise(() => fs.open(path, 'r')), (handle) => Effect.promise(() => handle.close()))。

限制与常见错误:手动 try/finally 会绕过 Effect 的中断模型,应改用 acquireRelease;忘记 Effect.scoped 会导致资源直到父作用域关闭(通常是应用结束)才释放;释放顺序为获取的逆序,需确保依赖资源先被获取。使用前需掌握 effect-ts-fundamentals 的核心 generator 模式。其余细节暂未提供。