我有两个按预期工作的功能
def getSomething: Promise[JsValue]
def getSomethingElse: Promise[JsValue]
现在我想定义一个调用def getAll: Promise[JsValue]
的第三个函数(getSomething
),然后根据响应返回响应或getSomethingElse
并将其响应附加到原始函数。 / p>
我目前的getAll
定义如下:
def getAll: Promise[JsValue] = {
getSomething flatMap { response:JsValue =>
(response \ "someAttribute").asOpt[String] match {
case None =>
val resultPromise = Promise[JsValue]
resultPromise.redeem(response)
resultPromise
case Some(someAttribute) => getSomethingElse map { moreResponse:JsValue =>
response ++ moreResponse
}
}
}
}
这有效,但是想知道是否有更短的方法来完成同样的事情,这是更典型的scala?
答案 0 :(得分:1)
得到了德里克·威廉姆斯对cross post on Play Frameworks Google Group的答复。
我在那里看到的唯一不理想的是Option上的模式匹配,而使用map / getOrElse可以让你更自由地组合更好。此外,如果您不打算使用某些值,最好不要给它命名,而是使用_
def getAll: Promise[JsValue] = {
getSomething flatMap { response =>
(response \ "someAttribute").asOpt[String] map { _ =>
getSomethingElse map (response ++ _)
} getOrElse {
Promise pure response
}
}
}