我仍然有时会使用Play with Scala来映射Futures ......
我试图将我的整个Supply DB表(即DB中的所有耗材)传递给视图 我尝试了两种截然不同的方法,但都失败了...... 以下是我尝试的方法和我得到的错误。
有人可以帮我解决这个问题吗,并解释一下为什么这两个都失败了? 提前谢谢!
注意:致电supplyService.all
会返回Future[Seq[Supply]]
。
首次尝试
def index = SecuredAction.async { implicit request =>
supplyService.all map { supplies =>
Future.successful(Ok(views.html.supplies.index(request.identity, SupplyForm.form, supplies)))
}
}
第二次尝试
def index = SecuredAction.async { implicit request =>
val supplies = supplyService.all
Future.successful(Ok(views.html.supplies.index(request.identity, SupplyForm.form, supplies)))
}
答案 0 :(得分:1)
没有Future.succesfull
supplyService.all.map( supplies => Ok(views.html.supplies.index(request.identity, SupplyForm.form, supplies)) )
由于您可以构建函数Seq[Supply] => Result
,因此您可以轻松map
通过functor界面Future[Seq[Supply]]
到Future[Result]
。
未来也是monad,因此您可以Seq[Supply] => Future[Result]
使用flatMap
方法。
但是Future.successfull
是monad单位,而Future
的许多monad是真的
mx.flatMap(f andThen unit) = mx.map(f)
所以你的
ms.flatMap(supplies => Future.successfull(f(supplies)) =
ms.flatMap(f andThen Future.successfull) =
ms.map(f)