从 Scala Future 的列表中产生结果
Yield a result from a list of Scala Future
我是 Scala 的新手 Future
s,我正在处理一些简单的任务。
我有以下功能,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)
我是 Scala 的新手 Future
s,我正在处理一些简单的任务。
我有以下功能,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)