如何撰写"期货"清单?

Ric*_*nry 5 scala future

我有一个集合Promises.我一直在寻找一种有效的方法来组成结果Futures.目前我发现将它们组合起来最干净的方法是使用scalaz Monoid,如下所示:

  val promises = List(Promise[Unit], Promise[Unit], Promise[Unit])

  promises.map(_.future).reduce(_ |+| _).onSuccess {
    case a => println(a)
  }  

  promises.foreach(_.success(()))
Run Code Online (Sandbox Code Playgroud)

有没有一个干净的方法来做这个不需要scalaz?

Futures集合中的数量会有所不同,许多中间集合是不可取的.

Tra*_*own 7

你可以使用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)
Run Code Online (Sandbox Code Playgroud)

这将给你一个Future[List[Unit]],它不完全符合"许多中间集合"的资格,但也不一定是理想的.Future.reduce也有效:

Future.reduce(promises.map(_.future))((_, _) => ())
Run Code Online (Sandbox Code Playgroud)

这将返回Future[Unit]在满足所有期货时将满足的情况.