我正在使用play的WSClient
来进行REST调用。每个响应都是Future[WSResponse]
类型。如果我有一个URL列表,并且我为所有这些URL进行REST调用,我将获得Future[WSResponse]
的集合。我理解Future.sequence
和Future.traverse
的概念。但我的要求略有不同。
我说List(url1, url2,url3)
我想对url1
进行REST调用,一旦Future [WSResponse]完成,我想调用url2
,依此类推。 .. 我怎么做?我希望有一个lambda来为每个响应做一些事情。
答案 0 :(得分:1)
这是一个非常通用的示例方法:
def mapToFutureInSequence[A, B](as: List[A], f: A => Future[B])(implicit ec: ExecutionContext): Future[List[B]] = {
as.foldLeft(Future.successful(List.empty[B])) { (fbs, a) =>
for {
bs <- fbs
b <- f(a)
} yield b :: bs
}.map(_.reverse)
}
在这种情况下,A
将是一个网址,f
将WSClient
的方法返回Future[WSResponse]
,或者某个自定义函数与如果你想涉及你提到的lambda。