Keyfi uzunluktaki bir Vadeli İşlemler listesini Geleceğin Listesine dönüştürmenin bir yolunu arıyorum. Oyun Çerçevesi kullanıyorum, sonuçta, gerçekten istediğim şey a Future[Result]
, ama işleri daha basit hale getirmek için diyelim ki, bunu Future[List[Int]]
yapmanın normal yolu kullanmak olurdu Future.sequence(...)
ama bir bükülme var ... Bana verilen liste genellikle yaklaşık 10-20 vadeli işlem ve bu vadeli işlemlerden birinin başarısız olması alışılmadık bir durum değil (harici web hizmeti talepleri yapıyorlar). Birinin başarısız olması durumunda hepsini tekrar denemek yerine, başarılı olanlara ulaşıp geri verebilmek istiyorum.
Örneğin, aşağıdakileri yapmak işe yaramaz
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
Tek istisnayı elde etmek yerine, 1 ve 3'ü oradan çıkarabilmek istiyorum. Kullanmayı denedim Future.fold
, ama görünüşe göre bu sadece Future.sequence
perde arkasını arıyor .
Yardım için şimdiden teşekkürler!
.recover
gerçekten benim için eksik parçaydı.