Either[Throwable, Whatever]
在这种情况下处理异常的一种常见方法是使用来表示结果,其中某种失败实际上并不是那么异常。Dispatch 0.9使用either
on 方法使这一点变得方便Promise
(顺便说一句,我在回答您之前的问题时使用了该方法):
import com.ning.http.client.Response
val response: Either[Throwable, Response] = Http(req).either()
现在您可以非常自然地使用模式匹配来处理异常:
import java.net.ConnectException
response match {
case Right(res) => println(res.getResponseBody)
case Left(_: ConnectException) => println("Can't connect!")
case Left(StatusCode(404)) => println("Not found!")
case Left(StatusCode(code)) => println("Some other code: " + code.toString)
case Left(e) => println("Something else: " + e.getMessage)
}
您还可以使用许多其他方法来Either
更方便地处理故障 - 例如,请参阅这个 Stack Overflow 答案。