私はいくつかのテーブルから選択し、その結果をObjectに入れようとしています。私は辞書であり、私はそれらをすべて起動時にしたいので、これを実行したい。データベースから辞書オブジェクトを返すようになりました
これは私が今持っているものです。
コントローラー:
def getDictionaries = Action.async { implicit request =>
Future.successful(Ok(Json.toJson(dictionaryService.getDictionaries)))
}
DictionaryService:
override def getDictionaries : Dictionaries = {
val currencies: Future[Seq[Currency]] = dictionaryDao.getCurrencies
val propertyTypes: Future[Seq[PropertyType]] = dictionaryDao.getPropertyTypes
Dictionaries(
currencies.result(Duration(10L, TimeUnit.SECONDS)),
propertyTypes.result(Duration(10L, TimeUnit.SECONDS))
)
}
DictionaryDAO:
override def getCurrencies: Future[Seq[Currency]] = {
db.run(slickCurrencies.result)
}
... getPropertyTypes ...
辞書ケースクラスとC ompanionオブジェクト
case class Dictionaries (currencies: Seq[Currency], propertyTypes: Seq[PropertyType])
object Dictionaries {
implicit val jsonFormat = Json.format[Dictionaries]
}
私はcurrencies.result(Duration(10L, TimeUnit.SECONDS))
の非常に誇りに思っていないですが、私は簡単にJSONに変換できるように、私は、この関数から取得すべきかわかりません。コンパイラがAwait
オブジェクトを代わりに使用するように指示しているので、このコード行はまだ動作していません。
PropertyTypeについても、私は通貨と同じことをする必要があります。
希望の結果を得るにはどのような方法が良いですか?
私は学習段階に入っていますので、私はこれをほとんど得ません。
LATER EDIT:フローは次のとおりです。要求 - > getDictionaries - > dictionaryService.getDictionaries - > dictionaryDAO.getCurrencies & PropertyTypes
私が同期方法でそれらを取得する必要があるように私には思えます。
この目的は、辞書の種類ごとにリクエストを作成しないことです。私が10の辞書を持っているなら、私は1つの要求でそれらすべてを取得したい。
その後EDIT 2
これは非常によく見ていない私の作業例です:
コントローラー:
def getDictionaries = Action.async { implicit request =>
dictionaryService.getDictionaries.map {
dictionaries => Ok(Json.toJson(dictionaries))
}
}
DictionaryService:
override def getDictionaries : Future[Dictionaries] = {
dictionaryDao.getCurrencies.flatMap { currencies =>
dictionaryDao.getPropertyTypes.flatMap { propertyTypes =>
Future.successful(Dictionaries(
currencies,
propertyTypes
))
}
}
}
は、これは本当に動作します。これは正しく変換されますか?私の理解から、あなたのソリューションは私のディクショナリオブジェクトにいくつかの辞書の将来を保存するように指示しています。 – tzortzik
はい、アクションを実際に非同期にしたい場合は、コントローラに未来を伝播する必要があります。 'currencies.result(Duration(10L、TimeUnit.SECONDS))'あなたのスレッドは実際にブロックされ、将来の終了を待つことになります。 –
私はあなたが私を誤解していると感じています。私のコードを更新しました。少し見てください。 – tzortzik