Ich habe eine Liste der Server JSON-Objekte, die aus einer JSON-Datei gelesen werden.NodeJS Closure - Schleife durch Array von Objekten und ping einen Server mit Daten aus jedem Objekt
Ich bin durch jedes Server-Objekt durchlaufen, einen Wert aus dem Objekt und verkettet es mit einer Zeichenfolge, um eine URL zu erstellen. Dann mache ich eine Get-Anfrage mit der URL, um zu überprüfen, ob der Server läuft. Das Ergebnis der get-Anforderung sollte den Status jedes Serverobjekts festlegen.
Das Problem ist, dass bei jeder Schleife der Wert im Server-Objekt als undefiniert angezeigt wird. Ich kann nicht herausfinden, wo das Problem mit meiner Schließung es ist.
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;
}
Vielen Dank für Ihre Hilfe. Der Fehler, den ich bekomme, wenn ich diesen Code ausführe ist UnhandledPromiseRejectionWarning: Unhandled Versprechen Ablehnung (Ablehnung ID: 3): Fehler: Kann nicht den Domain-Namen bestimmen um das zu lösen? – emerfan
Ja, Sie müssen eine '.catch()' zum 'promise.all' hinzufügen Ich werde meine Antwort bearbeiten –