Scala 在recoverpartial方法中调用future
我有分部方法Scala 在recoverpartial方法中调用future,scala,future,Scala,Future,我有分部方法defaultRecover帮助从异常中恢复: def getName(length: Int): Future[String] = { if (length > 0) Future.successful("john") else Future.failed(new RuntimeException("failed")) } def defaultRecover: PartialFunction[Throwable, Str
defaultRecover
帮助从异常中恢复:
def getName(length: Int): Future[String] = {
if (length > 0)
Future.successful("john")
else
Future.failed(new RuntimeException("failed"))
}
def defaultRecover: PartialFunction[Throwable, String] = {
case _ => "jane"
}
// easy and working
val res = getName(0) recover {
defaultRecover
}
现在问题来了。我定义了第二种恢复方法emergencyRecover
,我想根据另一个调用的结果选择使用哪种恢复方法-isEmergency()
但是我得到了类型不匹配。如何实现这种错误处理?我需要使用另一种方法来恢复吗?正如我常说的,客户是您的朋友。您可以使用recoverWith
另外,请记住,它接收一个部分函数,因此您必须执行以下操作:
val res = getName(0) recoverWith {
case e => isEmergency() map {
case false => defaultRecover(e)
case true => emergencyRecover(e)
}
}
您只需使用recoverWith即可:
val res2 = getName(0) recoverWith {
case _ => isEmergency().map {
case false => "jane"
case true => "arnold"
}
}
val res2 = getName(0) recoverWith {
case _ => isEmergency().map {
case false => "jane"
case true => "arnold"
}
}