消耗失败的未来

有时,Future 中的计算会产生异常,这会导致 Future 失败。在创建未来示例中,如果调用代码将 550 传递给 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}")
        }
    }
}