假设你有你看获取的URL列表:
val urls = List(
"http://www.google.com",
"http://stackoverflow.com",
"http://www.bing.com"
)
在玩2.5.X,我们可以处理这些顺序,并使用akka.pattern.after
迫使每个调用之间的异步延迟。我们flatMap
Future
Web服务调用的结果将返回相同的值后一秒。
Future.traverse(urls) { url =>
wsClient.url(url).get().flatMap { result =>
// potentially process `result` here
akka.pattern.after(1.second, actorSystem.scheduler)(Future.successful(result))
}
} // returns Future[List[WSResponse]]
这需要你有一个WSClient
和ActorSystem
组件可用,以及在隐ExecutionContext
范围。
在玩的2.4.x和更早版本,你可以使用Promise.timeout
做同样的:
Future.traverse(urls) { url =>
wsClient.url(url).get().flatMap { result =>
// potentially process `result` here
Promise.timeout(result, 1.second)
akka.pattern.after(1.second, actorSystem.scheduler)(Future.successful(result))
}
}
玩什么版本的? –
玩版本2.5.3 – ceran