我真的一直在Scala和Play的這些概念中掙扎。我想更新我的數據庫,我想我需要將我的數據庫更新函數包裝在Future中,但我不知道如何返回所需的play.api.mvc.Result
。瞭解Scala Play行爲和期貨
我在斯卡拉控制器返回響應一些:
def somePath = MyCustomAction.async(parse.tolerantJson) { implicit request =>
request.body.validate[MyObject].map { myObject =>
for {
getSomething <- getSomethingFuture
getSomethingElse <- getSomethingElseFuture
} yield {
if (getSomethingElse) {
if (getSomething)
updateMyDatabase(myObject)//perform database request
else
BadRequest("Invalid request")
}
} else {
// do some other things
}
}
}
private [this] def updateMyDatabase(myObject: MyObject) {
// do things to update the database
}
應該updateMyDatabase將返回一個Result
?我是否想將它包裝在未來中並檢查它是否成功完成?如果我檢查,我是否在Success
方法上返回正確的Result
?
現在,我不理解如何構造這些東西或如何實際實施基於Future
的解決方案。
如果你的數據庫函數不返回以後,就沒有意義了未來包裝它除了滿足類型檢查。 – rethab
@rethab對不起,但不包裝在未來將它扔進異步池?否則,請求會阻止嗎? – NeedingHelp
@rethab另外,我想返回操作的成功或失敗。我應該只使用拋出的SomeException?這是慣用的和最好的拱? – NeedingHelp