在下面的示例中,我得到了异常 java.util.NoSuchElementException: Future.filter predicate is not satisfied
我想要结果Future( Test2 )
当检查if( i == 2 )
失败。如何在处理组合 future 的 for 理解中处理 filter/if?
下面是一个在 Scala REPL 中工作的简化示例。
代码:
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
最佳答案
当然,我自己想出了一个解决方案。也许有更好、更惯用的解决方案?
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"
val f3 = f2.recover{ case _ => "Test2" }
// OR val f3 = f2.fallbackTo( Future( "Test2" ) )
f3.value
关于带有过滤器的Scala Future以进行理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17869624/