从Scala Future

时间:2015-08-16 20:37:27

标签: scala future

我是Scala 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读取所有对象并返回一个大Vector中的所有对象。

(非常感谢代码片段;因为现在我不想学习Future,我只想为这种情况寻找解决方案。)

1 个答案:

答案 0 :(得分:2)

如果您想将期货编成一个可以调用的期货:

array(1) { [0]=> string(15) "aaabbb123456789" }

如果您想等待完成,那么:

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