我有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