消耗失敗的未來
有時,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}")
}
}
}