2016-05-27 102 views
1

我使用Node.js的,我有一個循環,看起來像這樣的只運行一半:的Javascript環路

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

} 

,它運行request之前返回0some_number-1,我不知道這是怎麼回事上。我正在使用request module

+0

您some_function是異步 – juvian

+0

@Tushar編輯,Juvian,我不知道這意味着什麼。 –

+0

異步接口允許腳本在其工作時繼續運行,並在腳本完成時調用回調函數。這是Node完成其所有I/O的方式。你可能會發現[本章](http://eloquentjavascript.net_n_node.html)有趣。與Node一起工作,完全不知道什麼異步是錯誤的。 – hlfrmn

回答

1

當您提出請求時,需要一段時間才能返回,但循環不會等待它,它會繼續。這種異步性質是Javascript的主要原則之一。

如果你想等待繼續循環之前每個請求,也許嘗試這樣的事:

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'就是我命名的函數,它本質上是一個同步的'for'循環。在'if'語句裏面是每次執行的內容。 –

+0

是的,我現在明白了。這工作完美。 –