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

标签 scala elasticsearch future

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

(这是最简单的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/

相关文章:

elasticsearch - 从fluentd添加elasticsearch中的原始字段

python - 等待执行者的 future : Future can't be used in 'await' expression

java - Callable 类中的并发修改异常

scala - 如何在 Spark 中为 DataFrame 编写基于多个值的条件

java - 使用类参数来分配字段值

mongodb - 在 kibana 的 elasticsearch 中有一个 not_analyzed 字段

java - 如何在 Java 中实现非阻塞 Future

scala - 在scalatest中测试方法时,是否可以模拟/ stub 在方法调用中实例化的对象?

scala - RxScala 中 FRP 的 Event 和 Behavior 对应的概念是什么?

elasticsearch - 如何在kibana 4中每秒制作一个图形滴答