Elasticsearch.js - 等待ping完成,异步调用

时间:2016-10-10 13:48:54

标签: javascript jquery ajax asynchronous elasticsearch

我正在使用浏览器中的elasticsearch.js。我想ping elasticsearch,等待请求完成然后返回连接的结果。但是现在它正在异步发生,即使连接正常也会返回undefined。我有这样的代码:

var connectionOK = false;

function createElasticsearchClient(hostAddress) {
    var client = new $.es.Client({
        hosts: hostAddress
    });
    return client;
}

function checkElasticsearchConnection(client) {
    $.when(pingElasticsearch(client)).done(function () {
        return connectionOK;
    });
}

function pingElasticsearch(client) {
    console.log("ELASTICSEARCH: Trying to ping es");
    client.ping({
        requestTimeout: 30000,

        // undocumented params are appended to the query string
        hello: "elasticsearch"
    }, function (error) {
        if (error) {
            console.error('ELASTICSEARCH: Cluster is down!');
            connectionOK = false;
            console.log("INSIDE: " + connectionOK);
        } else {
            console.log('ELASTICSEARCH: OK');
            connectionOK = true;
            console.log("INSIDE: " + connectionOK);
        }
    });
}

以及如何使用它:

var esClient = createElasticsearchClient("exampleserver.com:9200");
var esCanConnect = (checkElasticsearchConnection(esClient));

1 个答案:

答案 0 :(得分:0)

您正在将异步函数与同步函数混合使用。你可以改用这种方法:

function createElasticsearchClient(hostAddress, callback) {
    var client = new $.es.Client({
        hosts: hostAddress
    });
    return callback(client);
}

function pingElasticsearch(client, callback) {
    console.log("ELASTICSEARCH: Trying to ping es");
    client.ping({
        requestTimeout: 30000,

        // undocumented params are appended to the query string
        hello: "elasticsearch"
    }, function (error) {
        if (error) {
          return callback('ELASTICSEARCH: Cluster is down!');
        } else {
            return callback(null);
        }
    });
}

然后运行

createElasticsearchClient("exampleserver.com:9200", function(esClient) {
  pingElasticsearch(esClient, function(err) {
    if (err) console.log(err);
    else {
      //Everything is ok
      console.log('All good');
    }
  });
});