一个小时以来,有些事情一直让我抓狂。我正在开展一个业余项目,其中涉及使用 Javascript 访问 ElasticSearch。作为测试的一部分,我想创建一个索引。这是一个非常简单的代码片段,在我看来,应该执行此操作,并打印从 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 服务器返回响应后完成。相反,该进程只是挂起。有什么想法吗?
我知道只需向其中添加文档即可创建索引,但这种奇怪的行为让我很烦恼,我无法弄清楚其背后的原因或意义。
最佳答案
默认情况下,客户端会保持与elasticsearch的持久连接,以便后续对同一 Node 的请求速度更快。这会产生副作用,在调用 client.close()
之前阻止 Node 正常关闭。您可以将其添加到回调中,或者通过将 keepAlive: false
添加到客户端配置来禁用 keepAlive 连接。
关于javascript - 使用 ElasticSearch javascript 客户端创建索引,promise 不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861953/