带有过滤器的Scala Future以进行理解

标签 scala filter future for-comprehension

在下面的示例中,我得到了异常 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/

相关文章:

scala - 为什么set可以赋给变量但不能赋给参数

scala - 结合EitherT和Future

filter - 高级 Jira 查询过滤

javascript - 如何过滤带有多个参数的json对象?

rust - 如何使用 futures::sync::mpsc::channel 实现阻塞队列机制?

java - 本地工作的网络应用程序在 GAE 上抛出 VerifyError

string - Scala:如何找出用于 StringOps.map 的 CanBuildFrom 实现

javascript - Angular 自定义过滤器可以工作,但代码抛出错误

scala futures 顺序惰性执行

dart - Dismissible confirmDismiss 结合新路由导航导致Flutter崩溃