我是scala的新手,我必须在每个循环进行迭代时进行异步调用(使用elastic4s进行弹性索引编制)。在scala中执行此操作的最佳方法是什么。
val data = List("1","2","3","4")
data.foreach(element=>{
asyncCall(element)
})
所有asyncCall完成后,如何执行某些操作。我不想对响应做任何事情。如果一切成功,则仅打印成功;如果任何呼叫失败,则打印失败。 asyncCall返回Future [T]。
答案 0 :(得分:1)
您应该使用Future.sequence
。它将List[Future[T]]
更改为Future[List[T]]
。
在您的示例中:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
val f = Future.sequence(data.map(asyncCall)) // Future[List[String]]
//you can now do something when future finishes:
f.onComplete{
case Success(s) => println(s"Evethings fine: $s")
case Failure(e) => println(s"Something went wrong: $e")
}