1

我正在使用play-slick。我试图在一个漂亮的 DBaction 中返回一个未来,但我失败了:

def test = DBAction(parse.json){ implicit request =>
      scala.concurrent.Future {
        NotFound(Json.obj("error" -> "some error"))
      } 
}

[error]  found   : scala.concurrent.Future[play.api.mvc.Result]
[error]  required: play.api.mvc.Result

我该如何归还这个未来?Async { } 现在在 2.3 中消失了,并且 DBAction().async (正如文档所说,用于具有未来的正常播放动作)似乎不可用。

4

1 回答 1

1

自从我使用 Future.firstCompleteOf( DB call , timeout ) 以来,我最近遇到了同样的问题/问题,而似乎对我有用的是使用 DB.withSession 。

所以我的控制器动作仍然停留在 Action.async 块中,然后我的 Future 看起来像

Future.firstCompleteOf(Seq(Future( 
    DB.withSession {implicit session => MyTable.findById(id) } ), timeoutFuture) ).map { 
      case Whatever => … 
}.recoverWith {
  case Whatever => … 
}
于 2014-08-18T08:26:17.600 回答