gpt4 book ai didi

scala - 似乎无法让Future在Scala中运行回调

转载 作者:行者123 更新时间:2023-12-03 01:07:47 26 4
gpt4 key购买 nike

(我没有包括进口,以免使这个问题混乱不堪)

(这是最简单的Scala应用程序(使用Typesafe Activator上的scala-minimal模板创建)

我正在尝试对Elasticsearch Server运行查询。

我已经在 sbt控制台上运行了相同的代码,并且可以看到正确的结果。

但是,当我运行以下代码时,我看到"END"(回调之后的代码)被打印,但是Success回调和Failure回调都没有运行。

我是Scala新手,所以也许我在这里做错什么了? 编译此代码。 (只是让您知道所有导入都在那里)

object Hello{
def main(args: Array[String]): Unit = {
val client = ElasticClient.remote("vm-3bsa", 9300)

val res:Future[SearchResponse] = client.execute{ search in "vulnerabilities/3bsa" query "css" }

res onComplete{
case Success(s) => println(s)
case Failure(t) => println("An error has occured: " + t)
}

println("END")
//EDIT start
Await.result(res,10.seconds)
//EDIT end
}
}

最终编辑

如果我改为打印 onComplete的调用结果,则可以使用它而不是 Await.result:
val await=Await.result(res,10.seconds)
println(await)
// results shown

最佳答案

主线程将注册您的onCompleteprintln("END"),然后退出,这使程序终止,因此您永远不会看到onComplete回调。

您可以使用Await.result(future, timeout)阻止主线程,使其保持 Activity 状态,直到答案到来为止。在服务器环境中,这是一个很大的禁忌,但在这样的小型应用程序中,阻塞一个线程不是问题。

关于scala - 似乎无法让Future在Scala中运行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24767088/

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