0
JSONファイルから読み込まれるサーバーJSONオブジェクトのリストがあります。NodeJS Closure - オブジェクトの配列をループし、各オブジェクトのデータでサーバーにpingを実行
私は各サーバーオブジェクトをループし、オブジェクトから値を取り出し、文字列と連結してURLを作成します。次に、URLを使ってリクエストを出して、サーバーが起動しているかどうかを確認します。取得リクエストの結果は、各サーバーオブジェクトのステータスを設定する必要があります。
問題は、各ループでサーバーオブジェクトの値が未定義として表示されていることです。私はどこで問題を解決するかわからない。
var servers = require('./data/servers.json');
var ping = require('http');
var newServers = statusChecker(servers);
function statusChecker(servers) {
var i;
for(i=0;i<servers.length;i++) {
servers[i]['status'] = function(j) {
return function() {
var proto = 'http://'
var server = servers[i].servername;
var healthEndPoint = '/health-end-point';
var url = proto+server+healthEndPoint;
//This logs the url with the server part undefined
console.log(url);
ping.get(url, function(res){
console.log(res);
return true;
}).on('error', function(e){
return false;
});
}()
}(i);
}
return servers;
}
ありがとうございました。このコードを実行するとエラーが発生する:UnhandledPromiseRejectionWarning:未処理の約束拒否(拒否ID:3):エラー:ドメイン名を特定できないサーバー名をハードコードすると、約束のリストが返されます。これを解決するには? – emerfan
はい、 'promise.all'に' .catch() 'を追加する必要があります。私は自分の答えを編集します –