从 Scala Future 的列表中产生结果

Yield a result from a list of Scala Future

我是 Scala 的新手 Futures,我正在处理一些简单的任务。

我有以下功能,return是一个 Future 列表,我想做的就是读取结果(并阻塞直到所有 future 完成)。

private def findAll(className: String): List[Future[Vector[ParseObject]]]= {
    def find(query: ParseQuery[ParseObject], from: Int, limit: Int) = {
      query.skip(from)
      query.limit(limit)
      Future(query.find().asScala.toVector)
    }

    val count = ParseQuery.getQuery(className).count()
    val skip = 1000
    val fromAndLimit = for (from <- 0 to count by skip) yield (from, if (from + skip < count) skip else count - from )
    println("fromAndLimit: " + fromAndLimit)

    (for((from, limit) <- fromAndLimit if limit > 0) yield find(ParseQuery.getQuery(className), from, limit)).toList
  }

正如所显示的那样,该函数尝试读取 Parse.com 中的所有对象和 return 一大 Vector 中的所有对象。

(非常感谢代码片段;因为现在我不想学习 Future,我只是想要一个针对这种情况的解决方案)。

如果你想将期货组合成一个,你可以调用:

val compositeFuture: Future[List[Vector[ParseObject]]] = Future.sequence(findAll(???))

如果要等待完成,则:

val result: List[Vector[ParseObject]] = Await.result(compositeFuture, 1 minute)