【发布时间】:2014-10-31 01:32:49
【问题描述】:
假设我需要调用远程 JSON/HTTP 服务。我发出一个 JSON 请求,通过 HTTP 将其发送到服务器,然后接收并解析 JSON 响应。
假设我的数据类型为 MyErrorfor 错误并且我的所有函数都返回 Either[MyError, R]
type Result[A] = Either[MyError, A]
def makeJsonRequest(requestData: RequestData): Result[String] = ...
def invoke(url: URL, jsonRequest: String): Result[String] = ...
def parseJsonResponse(jsonResponse: String): Result[ResponseData] = ...
我可以把它们结合起来写一个新函数:
def invokeService(url: URL, requestData: RequestData) Result[ResponseData] = for {
jsonRequest <- makeJsonRequest(requestData).right
jsonResponse <- invoke(url, req).right
responseData <- parseJsonResponse(jsonResponse).right
} yield responseData
现在如果parseJsonResponse 失败了怎么办?
我得到了错误,但我还需要整个 上下文。那就是我需要url、requestData 和jsonRequest。你会建议我怎么做?
【问题讨论】:
-
不确定我是否完全理解您的要求,但您可以使用
.left.map(...)映射到两者的左侧。 -
感谢您的建议。我会试着问另一个问题。
标签: scala error-handling either