我正在寻找一种方法将Futures的任意长度列表转换为List of Future.我正在使用Playframework,所以最终,我真正想要的是Future[Result],但为了简化,我们只是说Future[List[Int]]这样做的正常方法是使用Future.sequence(...)但是有一个扭曲......我给出的列表通常有其中约有10-20个期货,其中一个期货失败并不常见(它们正在制作外部网络服务请求).在其中一个失败的情况下,我不想重试所有这些,而是希望能够获得那些成功的并返回那些.
例如,执行以下操作不起作用
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.Success
import scala.util.Failure
val listOfFutures = Future.successful(1) :: Future.failed(new Exception("Failure")) ::
Future.successful(3) :: Nil
val futureOfList = Future.sequence(listOfFutures)
futureOfList onComplete {
case Success(x) => println("Success!!! " + x)
case Failure(ex) => println("Failed !!! " + ex)
}
scala> Failed !!! java.lang.Exception: Failure
Run Code Online (Sandbox Code Playgroud)
我没有得到唯一的例外,而是希望能够将1和3拉出来.我尝试过使用Future.fold,但显然只是Future.sequence在幕后调用.
在此先感谢您的帮助!