【发布时间】:2015-12-28 05:30:10
【问题描述】:
我正在为 API 编写一个包装器,我想对应用程序问题进行错误处理。每个请求都返回一个 Future 所以为了做到这一点,我看到了 2 个选项:使用 Future[Either] 或使用异常来立即使未来失败。
这是一个包含两种情况的 sn-p,response 是一个带有 HTTP 请求返回的未来:
def handleRequestEither: Future[Either[String, String]] = {
response.map {
case "good_string" => Right("Success")
case _ => Left("Failed")
}
}
def handleRequest: Future[String] = {
response.map {
case "good_string" => "Success"
case _ => throw new Exception("Failed")
}
}
这是在这两种情况下获得结果的 sn-p:
handleRequestEither.onComplete {
case Success(res) =>
res match {
case Right(rightRes) => println(s"Success $res")
case Left(leftRes) => println(s"Failure $res")
}
case Failure(ex) =>
println(s"Failure $ex")
}
handleRequest.onComplete {
case Success(res) => println(s"Success $res")
case Failure(ex) => println(s"Failure $ex")
}
我不喜欢使用异常,但是使用Future[Either] 会使事后获得响应变得更加冗长,如果我想将结果映射到另一个对象,它会变得更加复杂。这是要走的路,还是有更好的选择?
【问题讨论】:
-
你可能想看看这个:gist.github.com/jnape/5299612
标签: scala api exception error-handling