(我不包括进口产品,以免弄乱这个问题)
(这是最简单的Scala应用程序(使用Typesafe Activator上的scala-minimal模板创建))
我试图对Elasticsearch Server运行查询。
我在 sbt console 上运行了相同的代码,我可以看到结果正常。
但是,当我运行以下代码时,我会看到"END"
(回调后的代码)被打印,但是Success回调和Failure回调都没有运行。
我是斯卡拉诺布,所以也许我在这里做错了什么? 此代码编译。(只是为了让您知道所有导入都在那里)
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
答案 0 :(得分:2)
主线程将注册您的onComplete
,println("END")
,然后退出,这会使程序终止,因此您永远不会看到您的onComplete回调。
您可以使用Await.result(future, timeout)
阻止主线程使其保持活动状态,直到答案到达为止。在服务器上下文中,这是一个很大的禁忌,但在像这样的小应用程序中,阻塞一个线程不是一个问题。