哪种方式最好恢复类型A的未来[Try [A]]类型?
val future: Future[String] = ???
val tr: Try[String] = ???
future recover {case _ => "recovered"}
tr recover {case _ => "recovered"}
val futureTry: Future[Try[String]] = ???
如何使用"恢复" ?
答案 0 :(得分:1)
您需要map
Future
至recover
一个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" }