私はScalaとPlayでこれらの概念のいくつかを本当に苦労しています。私は自分のデータベースを更新したいと思います。将来私のデータベース更新機能をラップする必要があると思いますが、必要なものを返す方法がわかりませんplay.api.mvc.Result
。Scalaのプレイアクションと先を理解する
私はいくつかの応答を返すスカラ座でのコントローラがあります。
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
}
がResult
を返すことがupdateMyDatabaseべきか?私はそれを未来に包み込み、それが正常に完了したかどうかを確認したいのですか?私が確認したら、正しいResult
をSuccess
メソッドに返しますか?
今、私はこれらのものをどのように構成するか、実際にはFuture
ベースのソリューションを実装する方法を理解していません。
、型チェッカーを満足する以外、将来的にそれを包むにはポイントがありません。 – rethab
@rethab無知には申し訳ありませんが、将来的にはそれをラップして非同期プールに入れませんか?さもなければ、要求はブロックされますか? – NeedingHelp
@rethabまた、私は操作の成功または失敗を返したいと思います。 SomeExceptionをスローするだけでいいですか?その慣用的で最高のアーチですか? – NeedingHelp