我有3类期货的回应。第一个未来将返回一个JsValue,它定义将来2和将来3将被执行还是仅仅执行未来3。玩2.2 -Scala - 如何在控制器行动链期货
伪代码: 如果未来1,则{future2和未来3} 否则未来3
荫试图做到这一点的一出戏framwork行动,这意味着为了以后使用期货的结果,我不能使用onSuccess,onFailure和onComplete,因为它们都返回Unit而不是最后一个未来的实际JsValue。
我试图用map()和then来做到这一点,但我是斯卡拉noob,我想我无法做到这一点,因为我总是错过了一点。这是我目前的方法,这是行不通的!
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))
}
这里实施的解决方案,非常感谢你: https://gist.github.com/MeiSign/d7ab401c717e8b8ef6b9 – MeiSign
你为什么要创建索引@运行?不应该这样做吗? –
在我的用例索引中有一个固定的映射,我希望能够在运行时创建它们。我们在这里谈论的是可被视为内容容器的elasticsearch索引。 – MeiSign