消耗失败的未来
有时,Future 中的计算会产生异常,这会导致 Future 失败。在创建未来示例中,如果调用代码将 55
和 0
传递给 divide
方法怎么办?当然,在尝试除以零之后,它会抛出一个 ArithmeticException
。如何处理消费代码?实际上有一些方法可以解决失败问题。
使用 recover
和模式匹配处理异常。
object Calculator {
def calculateAndReport(a: Int, b: Int) = {
val eventualQuotient = FutureDivider divide(a, b)
eventualQuotient recover {
case ex: ArithmeticException => println(s"It failed with: ${ex.getMessage}")
}
}
}
使用 failed
投影处理异常,异常成为 Future 的值:
object Calculator {
def calculateAndReport(a: Int, b: Int) = {
val eventualQuotient = FutureDivider divide(a, b)
// Note the use of the dot operator to get the failed projection and map it.
eventualQuotient.failed.map {
ex => println(s"It failed with: ${ex.getMessage}")
}
}
}