You can use Future.traverse :
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.{ Future, Promise } val promises = List(Promise[Unit], Promise[Unit], Promise[Unit]) Future.traverse(promises)(_.future)
This will give you a Future[List[Unit]] , which does not exactly qualify as a "set of intermediate collections", but is not necessarily ideal. Future.reduce also works:
Future.reduce(promises.map(_.future))((_, _) => ())
This returns a Future[Unit] , which will be satisfied when all futures are completed.
source share