Play Framework 2.1 + ReactiveMongo - 填充多个下拉列表

时间:2012-12-25 21:40:56

标签: scala mongodb playframework playframework-2.0 playframework-2.1

我有一个包含多个下拉列表的表单,我在模板中使用selectoptions帮助程序创建。应填充列表的实体从数据库中获取。但是,从数据库中检索是异步的,因此我应该在操作中使用Async,如此example。但是,在我的情况下,我不应该等待一个find操作,而是Seq Future个未知大小的对象。那么我怎样才能在渲染页面之前等待多个Future -s来准备列表?或者有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:7)

如果你没有很好的方法来组合它们,Scala期货就没什么价值了。

如果你有一系列未来的对象,你可以将它转换为序列的未来:

val futureList = Future.sequence(listOfFutures)

所以现在你有一个未来需要处理。请参阅Future companion object上的文档,了解一些其他有用的功能,以各种方式组合期货。

如果你对使用期货的其他方式感到好奇(例如,你甚至可以使用简单的for-comprehansion将它们结合起来,因为它们具有monadic性质)你可能需要查看the primer on Scala futures以获得更多见解

此外,如果你正在使用ReactiveMongo,那么看看Play 2.x的docs on Enumerator/Iteratee implementation绝对值得。如果您掌握了这种方法,您将能够真正地结合您的反应性数据流以及更多功能。