Scala未来与过滤器的理解

在下面的例子中我得到异常java.util.NoSuchElementException:Future.filter谓词不满足

我想要结果Future(Test2)当检查if(i == 2)失败。如何处理过滤器/如果在理解期间处理组合期货?

以下是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
在你的理解中,你是通过i == 2过滤的。因为f1的值不是两个,它不会产生一个成功而是一个失败。过滤器的谓词不满足,因为您的错误消息告诉您。然而,f2.recover返回一个新的未来。 f2的值不被操纵。它仍然存储失败。这就是您在调用f2.value时收到错误消息的原因。
我可以想到的唯一的选择是使用其他的在你的理解,如图here

val f2 = for ( i <- f1) yield {
  if (i == 2) "Test1"
  else "Test2"
}
f2.value

这将返回一些(Success(Test2))作为您的f3.value。

http://stackoverflow.com/questions/17869624/scala-future-with-filter-in-for-comprehension

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Scala未来与过滤器的理解