2016-10-10 22 views
0

私はブラウザからelasticsearch.jsで遊んでいます。私はelasticsearchにpingを行い、リクエストが完了するのを待ち、接続の結果を返します。しかし、今は非同期的に起こっており、接続が正常であってもundefinedを返します。Elasticsearch.js - pingの完了を待つ、非同期の呼び出し

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)); 

答えて

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'); 
    } 
    }); 
}); 
+0

を実行するには、それが動作する、ありがとうございます。 – jpiechowka

+0

ちょっと@jpiechowka私の答えがあなたを助けたら、答えを受け入れることができますか? –

関連する問題