- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须并行进行一系列 IO 调用,如果成功则合并调用的内容。如果一个失败,其他人将按正常方式处理,但会显示错误消息。
我关于如何实现这一点的思考过程:Array<TE<E, A>> -> TE<E, Array<A>> -> TE<E, MergedA> -> [E, A]
我目前在做什么:
我目前正在对一组 TE 进行排序,但链中的任何故障都会产生一个左值。
pipe(
sequenceT(TE.taskEither)(arrayofTE), //TE<E,A>[] -> TE<E,A[]>
TE.map(mergeFn), //TE<E, A[]> -> TE<E, MergedA>
???
)
最佳答案
您可以通过T.task
而不是 TE.taskEither
至 sequence
/sequenceT
( docs ):
Action: execute an array of tasks in parallel, collecting all failures and successes
TaskEither: array.sequence(T.task)(taskEithers) - same for sequenceT
sequence
: 并行运行相同类型的任务
import { pipeable as P, taskEither as TE, task as T, array as A, either as E } from "fp-ts";
const arrayofTE: TE.TaskEither<string, number>[] = [
TE.right(1),
TE.right(2),
TE.left("Oh shit")
];
const run = P.pipe(
// change to T.task instead of TE.taskEither here
A.array.sequence(T.task)(arrayofTE),
mergeFn
);
run(); // run side effect
// returns Promise<{"errors":["Oh shit"],"results":[1,2]}>
// whatever merged result you want to have; this one collects all errors and all results
declare function mergeFn(te: T.Task<E.Either<string, number>[]>): T.Task<Results>
type Results = { errors: string[]; results: number[] };
sequenceT
: 并行运行不同类型的任务
import { apply as AP /* and others above */ } from "fp-ts";
// Here, TaskEither result can be number | boolean (success case), string on error
const arrayofTE = [TE.right(1), TE.right(true), TE.left("Oh shit")] as const;
const run = P.pipe(
AP.sequenceT(T.task)(...arrayofTE), // we use sequenceT here and pass T.task again
mergeFn
);
declare function mergeFn(a: T.Task<E.Either<string, number | boolean>[]>): T.Task<Results>
这里是沙箱
mergeFn
实现:
sequence ,
sequenceT .
关于typescript - 并行运行一组 TaskEithers,但如果 1 个或多个任务失败则继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60471399/
我必须并行进行一系列 IO 调用,如果成功则合并调用的内容。如果一个失败,其他人将按正常方式处理,但会显示错误消息。 我关于如何实现这一点的思考过程: Array> -> TE> -> TE ->
在我的 SPA 中,我有一个函数需要: 创建对象(例如用户的“标签”) 将其发布到我们的 API type UserId = string; type User = {id: UserId}; typ
我有 2 个嵌套请求的流程,其中可能有 3 个不同的结果: 其中一个请求返回错误 用户不是匿名的,返回个人资料 用户是匿名的,返回false 两个请求都可能抛出错误,因为它实现了 TaskEither
我有以下程序,当没有任何函数是异步的时,它可以正常工作。 interface Product { count: number pricePerItem: number } interface
我是 FP-TS 的新手,但仍然不太明白如何使用 TaskEither .我正在尝试异步读取文件,然后使用 yaml-parse-promise 解析结果字符串。 ==编辑== 我用文件的完整内容更新
我是一名优秀的程序员,十分优秀!