私は、Slickを使用してデータベースからデータを取得するasync Play Action
を持っています。そしてスリック、明らかに、ブロックを回避するためにFuture
Sを使用しています。単一のプレイアクション内で独立したSlickクエリを作成する
def show(id: Long) = Action.async {
db.run(entities.filter(_.id === id).result.headOption).map {
case None => templateFor("NEW_OBJECT")
case Some(x) => Ok(x)
}
def templateFor(code: String): Future[Result] = {
db.run(templates.filter(_.code === code).result.headOption).map {
case None => InternalServerError("No template")
case Some(x) => Ok(x)
}
}
問題がtemplateFor()
戻りFuture
、そのプレイが期待するものではありません全体Action
戻りFuture[Future[Result]]
への呼び出しです。だから、私はそれを取り除きたいですFuture
入れ子。それを行う簡単な方法は完了のためAwait
ですが、私は不要なブロックを避けたいと思います。 templateFor()
によって生成されたFuture[Result]
をそのまま私のAction
から返すことができれば、それは外側Future
をそれに置き換えるといいですね。
は 'それをflatMap' :) – ipoteka
を@ipotekaが言ったように:https://cdn.meme.am/cache/instances/folder331/500x/67321331.jpg :) –