W poniższym przykładzie uzyskać wyjątkiem java.util.NoSuchElementException: Future.filter predicate is not satisfied
Scala Future z filtrem dla zrozumienia
chcę mieć wynik Future(Test2)
gdy kontrola if(i == 2)
zawiedzie. Jak mogę obsłużyć filtr/czy w ramach rozumienia, które zajmuje się komponowaniem kontraktów terminowych?
Poniżej znajduje się uproszczony przykład, który działa w REPL Scala.
Kod:
import scala.concurrent.Future
import scala.util.{ Try, Success, Failure }
import scala.concurrent.ExecutionContext.Implicits.global
val f1 = Future(1)
val f2 = for {
i <- f1
if(i == 2)
} yield "Test1"
f2.recover{ case _ => "Test2" }
f2.value
Jednak jeśli f2 nie powiedzie się z powodu błędu "i <- f1", wynik nie będzie "Test2", ale nadal będzie to Niepowodzenie. –