使用ElasticSearch javascript客户端创建索引时,promise不会返回
这是一个小时以来一直让我抓狂的东西。我正在做一个附带项目,涉及使用Javascript访问ElasticSearch。作为测试的一部分,我想创建一个索引。以下是一个非常简单的代码片段,在我看来,它应该做到这一点,并打印从ElasticSearch服务器返回的消息:使用ElasticSearch javascript客户端创建索引时,promise不会返回,javascript,node.js,
elasticsearch,promise,Javascript,Node.js,
elasticsearch,Promise,这是一个小时以来一直让我抓狂的东西。我正在做一个附带项目,涉及使用Javascript访问ElasticSearch。作为测试的一部分,我想创建一个索引。以下是一个非常简单的代码片段,在我看来,它应该做到这一点,并打印从ElasticSearch服务器返回的消息: var es = require('elasticsearch'); var es_client = new es.Client({host: "localhost:9200"}); var breaker = Math.floor
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运行此代码时,会发生的情况是,发出了请求,但由于某种原因,承诺没有返回。我希望这段代码运行到最后,并在ES服务器返回响应后完成。相反,进程只是挂起。你知道为什么吗
我知道只需向索引中添加一个文档就可以创建索引,但这种奇怪的行为让我感到困扰,我无法找出其背后的原因或意义。默认情况下,客户端保持与elasticsearch的持久连接,以便后续对同一节点的请求速度更快。这样做的副作用是在调用
client.close()
之前,阻止节点正常关闭。您可以将其添加到回调中,或者通过将keepAlive:false
添加到客户端配置中来禁用keepAlive连接。查看源代码后,我几乎可以肯定这是一个bug-请在github上的跟踪器中打开一个问题