scala - 从 Task[Either[A, Task[B]]] 转换为 Task[Either[A, B]]
问题描述
我正在使用 monix 来解决副作用并以这种类型结束
Task[Either[A, Task[B]]]
,有没有办法得到Task[Either[A, B]]
?
到目前为止,我所能做的就是转换Task[Either[A, Task[B]]]
为Task[Any]
,基本上Either
使用模式匹配和展平进行删除,但在过程中缺少类型信息
val tEitherT: Task[Either[A, Task[B]]] = ???
val finalType: Task[Any] =
tEitherT.map(either => {
either match {
case Right(value) => value // Task[B]
case Left(value) => Task(value) // Lift
}
}).flatten
解决方案
试试这个:
tEitherT.flatMap {
case Right(taskB) => taskB.map(Right(_))
case Left(a) => Task(Left(a))
}
推荐阅读
- docker-compose - 如何将 ENV 变量从 Docker-compose 传递给 Spring Cloud Data Flow Task?
- mysql - 使用docker时mysql连接关闭
- javascript - 如何使用reduce而不是两个循环来改进代码?
- r - 来自外部数据帧的 dplyr 索引导致不连贯的值
- r - 从带有文本和数字的列中提取数字
- python - Pandas -> DataFrame -> 按价格排名
- r - 在列标题之后读取 R 中的 excel 文件
- javascript - ReactJS:对象数组的useState
- flutter - 产生订阅流的结果
- windows - GIT 默认忽略特定文件夹中的文件