for循环在nodejs中无法正常工作

我正在使用diffbot API for循环

这是我的代码

for (var i = 0; i< 200; i++){ /* pass url from diffbot */ console.log("Ready to send Url for parsing to Diffbot "); diffbot.article({ uri: url }, function(err, response) { if (!err) { console.log(i); } else { console.log("Error Occur in url " + i + "and error is " + err); /* need to Add logic for parsing */ } }); } 

现在我得到了控制台消息

 output is coming 200 200 200 200 200 

两百次。

预计输出0到199

有没有人告诉我我错了?

谢谢

  for (var i = 0; i < 200; ++ i) { diffbot.article ({ uri: url }, (function (i) { return function (err, response) { ... } })(i)); } 

这将工作。

会发生什么很简单:

你的循环使200个职位。 响应被asynchronous执行,这意味着所有的post都可以在第一个响应到达的时候执行callback函数。 所以, i==200那么。

在您的评论后详细阐述一下:

正如fzzle的回答中所述,你需要一个closures来保持当前的值,

  diffbot.article({ uri: url }, (function(i) { return function(err, response) { ... } })(i)); 

function(i){ ... }callback函数会创build闭包。 这样,我的当前值被传递给函数,然后可用于响应你想要的值,只要这个响应会回来。