用途:TaskEither 表示“可能失败的异步操作”,可理解为 Promise<Either<E, A>>。当需要异步错误处理、调用 API,或处理可能失败的 Promise 操作时使用它,可获得类型化的错误信息并支持组合。
主要能力:
- 创建:TE.right(value) 表示异步成功;TE.left(error) 表示异步失败;TE.tryCatch(asyncFn, toError) 将 Promise 转为 TaskEither;TE.fromEither(either) 将 Either 转为 TaskEither。
- 变换:TE.map(fn) 变换成功值;TE.mapLeft(fn) 变换错误;TE.flatMap(fn) 串联返回 TaskEither 的函数;TE.orElse(fn) 从错误中恢复。
- 执行:TaskEither 是惰性的,必须调用 () 才会运行,得到 Either<E, A>;也可配合 TE.match 做模式匹配,分别处理错误与成功值。
使用方式(要点):
- import * as TE from 'fp-ts/TaskEither',并用 pipe from 'fp-ts/function' 组合流程。
- 包装 fetch 时可用 TE.tryCatch,例如把请求与 JSON 解析分别映射为网络错误与解析错误,再通过 TE.flatMap 串联多个异步调用,TE.map 转换结果。
- 并行调用可引入 sequenceT from 'fp-ts/Apply',使用 sequenceT(TE.ApplyPar)(...) 同时执行多个 TaskEither。
- 恢复场景可结合 TE.orElse 与 TE.getOrElse 提供默认值。
适用场景:需要为异步操作提供类型化错误、希望以声明式方式组合多个可能失败的异步步骤、或在 API 调用链中显式区分错误种类时。
限制与说明:资料未提供版本要求、性能数据、收费与许可信息;TaskEither 默认惰性,忘记调用 () 不会执行;错误类型需由使用方自行定义与转换。