给定这个代码
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
}
result包含f1的结果。但是,无论f1是否失败,fallbackTo块中的代码都会执行。我希望fallbackTo块仅在f1失败时执行。
也许我的例子太简单了(或者只是错了),但是fallbackTo有什么用呢?
2条答案
按热度按时间7ivaypg91#
您是正确的,如果成功,则返回
f1
,如果不是f2
,则您看到的打印结果是因为块没有延迟求值:因此,
f2
似乎是在传递给fallbackTo
时启动的(因此执行了print语句)。这可能是一个设计选择,如果它被延迟计算,f2
将仅在f1
失败后启动。如果你想避免这种行为,你可以使用
recoverWith
,它只在失败后触发:tquggr8v2#
另一种方法是显式强制f1失败: