用途
fp-async 是一个关于 TypeScript 异步错误处理的实用技能,主题是使用 fp-ts 的 TaskEither 构建干净的异步管道。它的目标很直接:不再写嵌套的 try/catch 块,不再丢失错误上下文,而是用可组合的方式处理异步操作的成功与失败。
技能把 TaskEither 定义为「一个追踪成功或失败的异步操作」,不引入多余术语。类型 TaskEither<Error, User> 的含义就是「一个要么以 Error 失败、要么以 User 成功的异步操作」。
主要能力
技能围绕 TaskEither 提供实用模式,并给出真实 API 示例,主要包括:
- Fetch 请求封装:定义 ApiError 类型(code、message、status、details),通过
TE.tryCatch包装 fetch,处理非 OK 响应、204 No Content,并把网络错误统一转换为 ApiError。在此基础上提供 get、post、put、delete 的 API 客户端,以及 getUser、createUser、updateUser、deleteUser 等使用示例。 - 数据库操作(Prisma 示例):定义 DbError 联合类型(NotFound、UniqueViolation、ConnectionError),用
wrapPrisma把 Prisma 调用包装为 TaskEither,并映射 Prisma 错误码(如 P2002 唯一约束、P2025 记录不存在)。示例包含 userRepository 的 findById、findByEmail、create、update、delete,以及组合多个操作的 createUserService。 - 文件操作(Node.js):定义 FileError 联合类型(NotFound、PermissionDenied、IoError),包装 fs.readFile、fs.writeFile,并实现 readJson。示例展示带 fallback 的 loadConfig:读取配置失败时回退到默认配置,最终用
TE.getOrElse提供默认值。
使用方式
技能说明中要求:在执行该技能前先阅读详细指南,指南保留了完整流程与参考资料,其安全、前置条件与验证要求应视为强制。对于聚焦任务,可加载相关章节;对于端到端任务,应完整阅读指南。
适用条件包括:需要在 TypeScript 中用 TaskEither 处理异步错误;任务涉及包装 Promise、组合 API 调用或替换嵌套 try/catch 流程;希望获得实用的 fp-ts 异步模式而非学术解释。
适用场景
- TypeScript 项目中统一异步错误处理。
- 组合多个 API 调用并保留错误上下文。
- 用 TaskEither 重构嵌套 try/catch 代码。
- 数据库与文件系统操作的错误建模与管道组合。
限制
技能明确列出以下限制:仅在任务清晰匹配上述范围时使用;不应把输出当作环境特定验证、测试或专家评审的替代品;如果缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
关于该技能的收费、价格、支持平台等具体信息,资料中暂未提供。