Scala Future.fallbackTo有什么用?

时间:2014-09-20 08:43:06

标签: scala future

鉴于此代码

val f1: Future[Int] = Future { 5 } //Future.failed(new Exception("sorry"))
val f2: Future[Int] = Future { 6 }

val result : Future[Int] = f1.fallbackTo {
  println("Fall back to that F")
  f2
}

结果包含f1的结果。但是,无论f1是否失败,都会执行fallbackTo块中的代码。我期待只有在f1失败时才会执行fallbackTo块。

也许我的例子太简单(或者只是错误),但是fallbackTo的用途是什么?

1 个答案:

答案 0 :(得分:21)

你是对的,f1如果成功则返回f2,如果不是def fallbackTo[U >: T](that: Future[U]): Future[U] ,你看到的印刷品是因为该块未被懒惰地评估:

f2

因此fallbackTo似乎在传递给f2时启动(因此执行了print语句)。可能它是一个设计选择,如果它被懒惰评估f1只有在recoverWith失败后才会启动。

如果您想避免这种行为,可以使用仅在失败后触发的f1.recoverWith{ case _ => println(123); Future { 6 } }

{{1}}