我有一些代码可以将数组中的值转换为异步调用:

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
);

我的问题是,A.map(TE.flatMap(agentDispatcher.ensureChannelExists))将创建一堆并行执行的TaskEither,从而产生竞争条件.

有没有一种方法可以创建并立即创建awaitTaskEither,以便按顺序而不是并行执行它们?

推荐答案

简短的答案是使用sequenceSeqArray,它将按顺序运行每个任务,并将结果收集到单个ReaderTaskEither中.您当前使用的是RTE.sequenceArray,它类似,但具有您所描述的行为,其中每个promise 都是并行开始的.

Typescript相关问答推荐

具有映射返回类型的通用设置实用程序

如何使用axios在前端显示错误体

有没有一种方法可以在保持类型的可选状态的同时更改类型?

Angular 行为:属性类型从SignalFunction更改为布尔

对未到达受保护路由的路由环境做出react

将带点的对象键重新映射为具有保留值类型的嵌套对象

如何在省略一个参数的情况下从函数类型中提取参数类型?

将带有样式的Reaction组件导入到Pages文件夹时不起作用

如何为特定参数定义子路由?

如何从上传文件中删除预览文件图标?

如何静态键入返回数组1到n的函数

编剧- Select 动态下拉选项

VUE 3类型';字符串';不可分配给类型';参考<;字符串&>

Route.ts文件中未导出HTTP方法

在Vite中将SVG导入为ReactComponent-不明确的间接导出:ReactComponent

如何使用 runInInjectionContext 中的参数测试功能性路由防护

使用本机 Promise 覆盖 WinJS Promise 作为 Chrome 扩展内容脚本?

如何在 TypeScript 类型定义中简化定义长联合类型

使用受保护的路由和入门来响应路由

为什么我无法在 TypeScript 中重新分配函数?