首页 > 解决方案 > 从 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

标签: scalascala-catsside-effectsmonix

解决方案


试试这个:

tEitherT.flatMap {
  case Right(taskB) => taskB.map(Right(_))
  case Left(a) => Task(Left(a))
}

试试看!


推荐阅读