Ich versuche, eine Funktion zu schreiben, die 3 URLs als Befehlszeilenargumente nehmen und ihren Inhalt in der richtigen Reihenfolge protokollieren wird.Warum ruft diese While-Schleife nicht ihre inneren Funktionen auf?
Ich benutze eine while-Schleife, so dass ich die Ausführung von http.get blockieren kann, bevor ihr Inhalt am Ende selbst der Antwort protokolliert wurde.
var http = require('http')
var url1 = process.argv[2]
var url2 = process.argv[3]
var url3 = process.argv[4]
var urls = [url1, url2, url3]
while (urls.length>0){
var url = urls[0]
http.get(url, function callback(response){
var chars = ""
response.on('data', function(data){
chars+=data.toString()
})
response.on('end', function(err){
console.log(chars)
urls.shift()
})
})
}
ich etwas sehr falsch tun muss, weil Code in eine Endlosschleife verursacht (scheinbar urls.shift() aufgerufen wird nicht). Kann jemand den Fehler erklären?
Verschieben Sie urls.shift() außerhalb des Async-Codes. –
AJAX-Aufrufe sind asynchron. Sie müssen Callback-Kette oder Versprechen – Rajesh
Ihr aktueller Code verwendet Async-Aufrufe, aber Ihre 'while' blockiert Browser, bis alle Anforderungen beendet sind. Es sollte Endlosschleife sein – Justinas