2015-01-09 31 views
1

下面是一段时间以来一直让我疯狂的事情。我正在开发一个涉及使用Javascript访问ElasticSearch的项目。作为测试的一部分,我想创建一个索引。这里是一个非常简单的片断,在我脑海里,应该这样做,并打印从ElasticSearch服务器返回的消息:使用ElasticSearch javascript客户端创建索引,承诺不会返回

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服务器的响应回来后完成。相反,这个过程只是挂起。任何想法为什么?

我知道索引可以通过添加一个文档来创建,但是这个奇怪的行为只是给我造成了困扰,而我无法弄清楚它背后的原因或意义。

+0

可能的重复[如何将现有的回调API转换为承诺](http://stackoverflow.com/questions/22519784/how-do-i-convert-an-existing-callback-api-to-promises ) –

+0

看完源代码后,我几乎可以肯定这是一个错误 - 请在github上的跟踪器中打开一个问题 –

回答

1

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