Frage

I have a form with multiple drop-down lists that I create with select and options helpers in a template. Entities that should populate the lists are taken from the database. However, the retrieval from the database is asynchronous, so I should use Async in the action, as in this example. However, in my case, there is not a single find operation that I should wait on, but a Seq of Future objects, of unknown size. So how can I wait on multiple Future-s to prepare the lists before rendering the page? Or maybe there is some better way to do it?

War es hilfreich?

Lösung

Scala futures would worth nothing if you wouldn't have a nice way to combine them.

If you have a sequence of future objects you can transform it into a future of sequence:

val futureList = Future.sequence(listOfFutures)

So now you have a single future to deal with. See the docs on Future companion object for a few other useful functions to combine futures in various ways.

If you're curious about other ways to play with futures (e.g. you can even combine them using a simple for-comprehansion due to their monadic nature) you might want to take a look at the primer on Scala futures for more insights.

Also if you're working with ReactiveMongo it would be definitely worth to take a look at the docs on Enumerator/Iteratee implementation of Play 2.x. If you master that approach you will be able to do real magic combining your reactive data streams on the fly and much more.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top