Scala消费失败的未来

示例

有时,Future中的计算会创建异常,这将导致Future失败。在“创建未来”示例中,如果调用代码传递55并传递0给divide方法怎么办?ArithmeticException当然,在尝试除以零后会抛出一个“ a” 。消费代码将如何处理?实际上,有几种处理失败的方法。

使用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)
    
        // 注意使用点运算符来获取失败的投影并将其映射。
        eventualQuotient.failed.map {
            ex => println(s"It failed with: ${ex.getMessage}")
        }
    }
}