임의 길이의 Futures 목록을 Future of List로 변환하는 방법을 찾고 있습니다. 저는 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
유일한 예외를 얻는 대신 1과 3을 거기에서 빼낼 수 있기를 원합니다. 나는을 사용해 보았지만 Future.fold
분명히 Future.sequence
이면에서 호출 합니다.
도움을 주셔서 미리 감사드립니다!
.recover
나에게 실종 된 부분이었다.