Elasticsearch NodeJS:如何返回结果

时间:2016-02-12 14:17:39

标签: javascript node.js elasticsearch elasticsearch-2.0

我试图将一个值从js函数调用中返回为

var elasticsearch = require('elasticsearch');

var client = elasticsearch.Client({
    host: 'localhost:9200',
    log: 'trace'
});

var r="";

client.ping({
    // ping usually has a 3000ms timeout
    requestTimeout: Infinity,

    // undocumented params are appended to the query string
    hello: "elasticsearch!"
}, function (error) {
    if (error) {
        console.trace('elasticsearch cluster is down!');
    } else {
        console.log('All is well ping');
        function getmeresResult(err, result) {
            if (err) return err;
            console.log("Got res in ping "+result);
            return result;          
        }
        r=getmeres(client,getmeresResult);
        console.log("inner r is "+r);
        return r;
    }
});
console.log("outer r is "+r);

这给了我

Got res in ping 12,12,23
inner r is 12,12,23

console.log("outer r is "+r);永远不会打印出来!这是为什么?我怎样才能得到结果' out' client.ping函数调用?

1 个答案:

答案 0 :(得分:1)

我认为你误解了node.js的工作方式。它是异步的,这意味着当还没有调用elasticsearch调用的回调时,会打印示例中的变量r。我想你想要一个全局r变量,以便在使用存储在那里的值的elasticsearch响应之后执行一些代码。在这种情况下,如果您想使用回调接口,您可以:

  • 在elasticsearch响应中嵌套另一个函数调用;
  • 使用简化此类工作的库,例如async

在后一种情况下,你可以使用async.waterfall,你可以使用elasticsearch js client here找到一个例子。