Scala在循环中等待异步调用完成
我是scala新手,在遍历for-each循环时必须进行异步调用(使用elastic4s进行弹性索引)。在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返回
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所有异步调用吗?