2
我在Java中有一个Play 2.1控制器,我需要调用外部web服务来获取一些数据。然后用这个数据结果,我必须调用另一个带有n个调用的Web服务,与第一个Web服务调用的n个结果相对应。Play2使用AsyncResult(Java)调用多个webservices
对于性能问题,我想使用承诺在分离的线程中进行n个调用。
所以我有这样一个循环:使用异步API
List<String> firstResults = WS.url("http://...") ///...blablabla
for(String keyword : firstResults){
Promise<ResultType> promise = play.libs.Akka.future(
new Callable<ResultType>() {
public Integer call() {
return //...
}
}
);}
如何同步n个承诺,然后降低一个响应(所有结果的列表)的结果,然后返回只有在所有呼叫完成后才回应http响应?
不能够知道呼叫的数量使问题更加困难......(我不能宣布承诺为promise1,promise2等)
谢谢詹姆斯,这正是我所需要的! Scala Iteratee API中等效于“waitAll”的是什么? – Loic 2013-04-30 06:59:02
waitAll令人困惑的名字已解决,现在该方法被命名为“sequence”:) – Loic 2013-04-30 13:23:58
由于iteratees是从消费者产生结果的消费者,而不是将来的值,所以waitAll或序列并没有意义一些迭代。但是,例如,您可以使用Enumeratee.zip或Enumeratee.zipWith来使两个迭代消耗相同的流,并生成其结果的元组。 – 2013-05-01 03:48:43