使用ElasticSearch javascript客户端创build索引,promise不会返回

从一个小时以来,这是一直让我疯狂的事情。 我正在开发一个涉及使用Javascript访问ElasticSearch的项目。 作为testing的一部分,我想创build一个索引。 这里是一个非常简单的代码片段,在我看来,应该这样做,并打印从ElasticSearch服务器返回的消息:

var es = require('elasticsearch'); var es_client = new es.Client({host: "localhost:9200"}); var breaker = Math.floor((Math.random() * 100) + 1); var create_promise = es_client.indices.create({index: "test-index-" + breaker}); create_promise.then(function(x) { console.log(x); }, function(err) { console.log(err);}); 

当我进入一个目录时,运行npm install elasticsearch ,然后用NodeJS运行这个代码,会发生什么,请求是否发生,但是由于某种原因,promise不会返回。 我希望这个代码运行到最后,并且一旦ES服务器的响应回来,就完成了。 相反,这个过程只是挂起。 任何想法为什么?

我知道一个索引可以通过添加一个文档来创build,但是这个奇怪的行为只是使我感到困惑,我无法弄清楚它的原因或意义。

默认情况下,客户端保持与elasticsearch的持久连接,以便后续对同一节点的请求更快。 这有阻止节点正常closures的副作用,直到client.close()被调用。 您可以将此添加到您的callback,或通过添加keepAlive: false到您的客户端configuration禁用keepAlive连接。