タイプ Response の先物が 3 つあります。最初のフューチャーは、フューチャー 2 とフューチャー 3 を実行するか、フューチャー 3 のみを実行するかを定義する JsValue を返します。
擬似コード: もし未来 1 なら {未来 2 と未来 3} でなければ未来 3
つまり、後で先物の結果を使用するために、onSuccess、onFailure、および onComplete を使用できません。これらはすべて、最後の未来からの実際の JsValue ではなく Unit を返すためです。
map() と andThen を使ってこれをやろうとしましたが、私は Scala 初心者で、いつもちょっとした点を見逃していたので、できなかったと思います。これがうまくいかない私の現在のアプローチです!
def addSuggestion(indexName: String, suggestion: String) = Action.async {
val indexExistsQuery: IndexExistsQuery = new IndexExistsQuery(indexName);
val addSuggestionQuery: AddSuggestionQuery = new AddSuggestionQuery(indexName, suggestion)
val indexCreationQuery: CreateCompletionsFieldQuery = new CreateCompletionsFieldQuery(indexName)
val futureResponse: Future[Response] = for {
responseOne <- EsClient.execute(indexExistsQuery)
responseTwo <- EsClient.execute(indexCreationQuery) if (indexExistsQuery.getBooleanResult(indexExistsQuery.getResult(responseOne)))
responseThree <- EsClient.execute(addSuggestionQuery)
} yield responseThree
futureResponse.map { response =>
Ok("Feed title: " + (response.json))
}