[A,未来[B]]到未来[A [B,B]]

Ali*_*hiu 4 scala future

有没有办法转换

Either[A, Future[B]] 
Run Code Online (Sandbox Code Playgroud)

到了

Future[Either[A, B]]
Run Code Online (Sandbox Code Playgroud)

我心里有类似的Future.sequence方法,从转换List[Future]Future[List]

End*_*Neu 6

不确定是否有开箱即用的解决方案,这就是我想出的:

def foldEitherOfFuture[A, B](e: Either[A, Future[B]]): Future[Either[A, B]] =
  e match {
    case Left(s) => Future.successful(Left(s))
    case Right(f) => f.map(Right(_))
  }
Run Code Online (Sandbox Code Playgroud)

除了捕获最终异常之外,Future您还可以添加一个recover并将其映射到Left:

case Right(f) => f.map(Right(_)).recover { case _ => Left(/** some error*/) }
Run Code Online (Sandbox Code Playgroud)