我有一个返回Future的调用 . 但是,我需要拨打n个电话,这样我才会回来n期货 . 我想知道如何在继续之前获得所有解决方案(不阻止服务器)
例如,
while(counter < numCalls){
val future = call(counter)
future.map{ x =>
//do stuff
}
counter += 1
}
//Now I want to execute code here after ALL the futures are resolved without
//blocking the server
3 回答
您可以使用
Future.sequence(futureList)
将List[Future[X]]
转换为Future[List[X]]
. 而且由于后者只是一个简单的Future
,你可以在Await.ready
或类似助手的帮助下等待它完成 .因此,您必须保留您生成的期货清单 . 就像是:
你也可以写成:
更功能一点:
我认为你想在期货结束后做点什么,比如说 . 一个回调,没有阻止原始呼叫?然后你应该做这样的事情:
http://docs.scala-lang.org/overviews/core/futures.html
因此,您不会通过等待呼叫阻止,但您仍然等待所有期货完成,然后对所有结果执行某些操作 . 关键方面是使用Future.sequence将大量未来加在一起,然后使用回调来对结果进行操作 .