我有一个包含多个下拉列表的表单,我在模板中使用select
和options
帮助程序创建。应填充列表的实体从数据库中获取。但是,从数据库中检索是异步的,因此我应该在操作中使用Async
,如此example。但是,在我的情况下,我不应该等待一个find
操作,而是Seq
Future
个未知大小的对象。那么我怎样才能在渲染页面之前等待多个Future
-s来准备列表?或者有更好的方法可以做到这一点?
答案 0 :(得分:7)
如果你有一系列未来的对象,你可以将它转换为序列的未来:
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绝对值得。如果您掌握了这种方法,您将能够真正地结合您的反应性数据流以及更多功能。