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