尝试的未来既恢复

时间:2014-07-28 19:03:35

标签: scala

哪种方式最好恢复类型A的未来[Try [A]]类型?

val future: Future[String] = ???
val tr: Try[String] = ???

future recover {case _ => "recovered"}
tr recover {case _ => "recovered"}

val futureTry: Future[Try[String]] = ???

如何使用"恢复" ?

2 个答案:

答案 0 :(得分:1)

您需要map Futurerecover一个Failure,然后recover Future的实例Success

futureTry.map(_.recover{case _ => "recovered"})
    .recover{case _ => Success("recovered")}

Future[Try[A]]是多余的,因为Future与成功和失败状态的Try基本相同。在两层成功和失败方面没有多大意义,特别是如果您要将它们恢复到相同的默认值。

答案 1 :(得分:1)

如果Try中有Future,则将异常(如果存在)移动到Future的异常处理中是一件简单的事情:

val futureTry: Future[Try[String]] = ???
futureTry.flatMap {
  case Success(v) ⇒ Future.successful(v)
  case Failure(t) ⇒ Future.failed(t)
}.recover { case _ ⇒ "recovered" }