2016-05-27 13 views
1

ich Node.js verwende, und ich habe eine Schleife, die wie folgt aussieht:Javascript nur laufen die Hälfte der Schleife

var request = require('request'); 

for(var i = 0; i< some_number; i++){ 
console.log(i); 
request(url.concat(i), function(error, response, body){ 
if(!error){console.log("ABC" + i)} 
else{ 
console.log(error); 
}); 

} 

und es kehrt 0-some_number-1 vor request ausgeführt wird, und ich bin mir nicht sicher, was los ist auf. Ich benutze die request module.

+0

Ihre some_function ist async – juvian

+0

@Tushar bearbeitet und Juvian, ich bin nicht sicher, was das bedeutet. –

+0

Eine asynchrone Schnittstelle ermöglicht das Ausführen des Skripts, während es seine Arbeit ausführt, und ruft eine Rückruffunktion auf, wenn es fertig ist. Auf diese Weise führt Node alle I/O-Vorgänge aus. Sie könnten [dieses Kapitel] (http://eloquentjavascript.net/20_node.html) interessant finden. Arbeiten mit Node, ohne eine Vorstellung davon zu haben, was Async ist, scheint falsch zu sein. – hlfrmn

Antwort

1

Wenn Sie eine Anfrage machen, braucht es Zeit, um zurückzukehren, aber die Schleife wartet nicht darauf, es geht weiter. Diese asynchrone Natur ist einer der Hauptprinzipien von Javascript.

Wenn Sie für jede Anforderung warten soll, bevor die Schleife fortgesetzt, versuchen Sie vielleicht so etwas wie folgt aus:

function iterator(i) { 
    if (i < some_number) { 
    request(url.concat(i), function(err, response, body) { 
     if (err) console.log(err); 
     iterator(i + 1); 
    }); 
    } 
} 
// Kick off the loop 
iterator(0); 
+0

'Iterator' ist genau das, was ich die Funktion nannte, es ist im Wesentlichen eine synchrone For-Schleife. Innerhalb der 'if' Anweisung ist, was jedes Mal ausgeführt wird. –

+0

Ja, ich verstehe jetzt. Das funktioniert perfekt. –

Verwandte Themen