Scala在循环中等待异步调用完成

Scala在循环中等待异步调用完成,scala,asynchronous,foreach,future,Scala,Asynchronous,Foreach,Future,我是scala新手,在遍历for-each循环时必须进行异步调用(使用elastic4s进行弹性索引)。在scala中,最好的方法是什么 val data = List("1","2","3","4") data.foreach(element=>{ asyncCall(element) }) 如何在所有异步调用完成后执行某些操作。我不想对回应做任何事。如果一切都成功,只需打印success;如果任何调用失败,则打印fail。asyncCall返回

我是scala新手,在遍历for-each循环时必须进行异步调用(使用elastic4s进行弹性索引)。在scala中,最好的方法是什么

val data = List("1","2","3","4")

data.foreach(element=>{
          asyncCall(element)
        })


如何在所有异步调用完成后执行某些操作。我不想对回应做任何事。如果一切都成功,只需打印success;如果任何调用失败,则打印fail。asyncCall返回Future[T]。

您应该使用
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")
}

您打算并行地或一个接一个地du所有异步调用吗?