gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:11:26 24 4
gpt4 key购买 nike

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

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

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

如何在所有 asyncCall 完成后执行一些操作。我不想对响应做任何事情。如果一切成功就打印成功,如果任何调用失败就打印失败。 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")
}

关于Scala 等待异步调用在循环中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55422579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com