将 EitherT[Future, A, Future[B]] 转换为 EitherT[Future, A, B]

Convert EitherT[Future, A, Future[B]] to EitherT[Future, A, B]

我正在尝试将 EitherT[Future, A, B] 更改为 EitherT[Future, C, D],为此,我正在使用 bimap 来适当地映射左右部分。 当我正在转换这个 EitherT 的正确部分时,我正在进行一个服务调用 returns 我是 Future[D]…我在将这个 Future[D] 转换为 [=17] 时遇到了问题=] 在我的 bimap 中。不确定现在如何进行。如有任何帮助,我们将不胜感激。

伪代码:

val myResult: EitherT[Future, C, D] = EitherT[Future, A, B](myService.doStuff())
    .bimap({ err => /*deal with errors and give me C*/ }
      ,{ success => someService.doSomething(success) // This is returing a Future[D]. But I want a D 
       })

尝试.flatMap又名for-理解

import cats.data.EitherT
import cats.instances.future._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

val myResult: EitherT[Future, C, D] = for {
  d <- EitherT.right(someService.doSomething())
  res <- EitherT[Future, A, B](myService.doStuff())
    .bimap({ err => ??? : C //deal with errors and give me C
    }, { success => {
      d
    }
    })
} yield res

尝试.biSemiflatMap

val myResult: EitherT[Future, C, D] =
  EitherT[Future, A, B](myService.doStuff())
    .biSemiflatMap({ err => Future.successful(??? : C)
    }, { success => {
      someService.doSomething(success)
    }
    })