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闭包。 这样,我的当前值被传递给函数,然后可用于响应你想要的值,只要这个响应会回来。