有没有办法转换
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]
不确定是否有开箱即用的解决方案,这就是我想出的:
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)