Scala Future with filter in for comprehension
filter, for-comprehension, future, scala
Solution
In your `for-comprehension`, you are filtering by `i == 2`. Because the value of `f1` is not two, it will not yield a `Success` but instead a `Failure`. The predicate of the filter is not satisfied, as your errror message tells you. However, `f2.recover` returns a new `Future`. The value of `f2` is not manipulated. It still stores the `Failure`. That is the reason you get the error message when you call `f2.value`. The only alternative I can think of would be using an `else` in your `for-comprehension` as shown here.
val f2 = for ( i <- f1) yield {
if (i == 2) "Test1"
else "Test2"
}
f2.value
This will return `Some(Success(Test2))` as your `f3.value` does.
Problem
In the example below I get the exception `java.util.NoSuchElementException: Future.filter predicate is not satisfied` I want to have the result `Future( Test2 )` when the check `if( i == 2 )` fails. How do I handle filter/if within a for comprehension that deals with composing futures? Below is a simplified example that works in the Scala REPL. Code: ``` 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 ```