javascript - 使用 ElasticSearch javascript 客户端创建索引,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((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/

相关文章:

javascript - 我在使用 javascript $ .get (URL, callback) 时遇到问题;

javascript - 如何从js到html的json响应中获取追加数据

javascript - React-Redux,如何在渲染新组件之前设置全局状态?

javascript - 循环 Mongoose 数据数组

javascript - 上传文件 Node.js Express put 方法

node.js - winston 没有登录 typescript 控制台

Elasticsearch:如何存储术语向量

ruby - 将Rails应用程序连接到Elasticsearch服务器

php - 如何根据来自Elasticsearch的匹配查询获取总匹配记录

javascript - 在 PageMod 的 HEAD 标签顶部插入脚本(Firefox Add-on SDK)