我是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,我只想为这种情况寻找解决方案。)
答案 0 :(得分:2)
如果您想将期货编成一个可以调用的期货:
array(1) { [0]=> string(15) "aaabbb123456789" }
如果您想等待完成,那么:
val compositeFuture: Future[List[Vector[ParseObject]]] = Future.sequence(findAll(???))