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);从来没有打印过!这是为什么?如何从 client.ping 函数调用中“输出”结果?

4

1 回答 1

1

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

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

在后一种情况下,您可能可以使用 async.waterfall,您可以在此处找到使用 elasticsearch js 客户端的示例。

于 2016-02-12T22:57:28.913 回答