Elasticsearch NodeJS:如何 return 结果

Elasticsearch NodeJS : How to return result

我正在尝试 return 一个 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); 根本不会打印出来!这是为什么?我如何获得 client.ping 函数调用的结果 'out'?

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

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

在后一种情况下,您可能可以使用 async.waterfall,并且您可以在 elasticsearch js 客户端中找到一个示例 here