提问人:Adam Arold 提问时间:9/12/2023 更新时间:9/13/2023 访问量:33
使用 fp-ts 时如何使用 TypeScript 序列化任务执行?
How to serialize task executions with TypeScript when using fp-ts?
问:
我有一些代码可以将数组中的值转换为异步调用:
const createDiscordChannels = flow(
A.map((channel: CreateChannelDto) => ({
...channel,
provider,
externalServerId: providerId,
})),
//* 📘 We need to check all the channels before we do anything
//* because otherwise we can end up in an inconsistent state
A.map(agentDispatcher.isChannelValid), // 👈 returns TaskEither
A.map(TE.flatMap(agentDispatcher.ensureChannelExists)), // 👈 creates race condition
A.map(RTE.fromTaskEither),
RTE.sequenceArray
);
我的问题是这将创建一堆并行执行的 s,从而创建竞争条件。A.map(TE.flatMap(agentDispatcher.ensureChannelExists))
TaskEither
有没有办法创建并立即等待按顺序而不是并行执行它们?TaskEither
答:
1赞
Souperman
9/13/2023
#1
简短的回答是使用 sequenceSeqArray
,它将按顺序运行每个任务并将结果收集到单个 .您当前使用的 which 是相似的,但具有您正在描述的行为,其中每个 promise 都是并行启动的。ReaderTaskEither
RTE.sequenceArray
评论