我有 3 个响应类型的期货。第一个future返回一个JsValue,它定义是执行future 2和future 3还是只执行future 3。
伪代码:如果 Future 1 那么 {future2 and future 3} else future 3
我试图在一个游戏框架动作中做到这一点,这意味着为了以后使用期货的结果,我不能使用 onSuccess、onFailure 和 onComplete,因为它们都返回 Unit 而不是上一个未来的实际 JsValue。
我尝试使用 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))
}