期待どおりに機能する2つの機能があります
def getSomething: Promise[JsValue]def getSomethingElse: Promise[JsValue]
次に、3 番目の関数 ( def getAll: Promise[JsValue])を定義getSomethingして、応答に基づいて応答を返すか、getSomethingElseその応答を元の関数に追加します。
私は現在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
}
}
}
}
これは機能しますが、より標準的なスカラである同じことを達成するためのより短い方法があるかどうか疑問に思っていましたか?