使用 ElasticSearch javascript 客户端创建索引,promise 不会 return

Creating an index with ElasticSearch javascript client, promise does not return

这是一个小时以来一直让我抓狂的事情。我正在做一个副项目,它涉及使用 Javascript 访问 ElasticSearch。作为测试的一部分,我想创建一个索引。这是一个非常简单的片段,在我看来,应该这样做,并打印从 ElasticSearch 服务器 returned 的消息:

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 的这段代码时,会发生什么情况,是发出了请求,但没有承诺 return 由于某种原因。我希望这段代码到 运行 结束,并在 ES 服务器返回响应后完成。相反,该过程只是挂起。有什么想法吗?

我知道可以通过向其中添加文档来创建索引,但这种奇怪的行为让我很烦恼,我无法弄清楚它背后的原因或意义。

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