我在 for 循环中使用 diffbot api
这是我的代码
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
有谁能告诉我我哪里错了
谢谢
最佳答案
发生的事情很简单:
您的循环发布了 200 个帖子。每个帖子的响应都是异步执行的,这意味着所有帖子都可以在第一个响应到达时完成,并执行回调函数。因此,到那时i==200
。
在您发表评论后详细说明:
在收到响应时,您需要一个闭包来保持 i
的当前值,如 fzzle 的答案中所述:
diffbot.article({ uri: url }, (function(i) {
return function(err, response) {
... }
})(i));
将回调函数括在 function(i){ ... }
中创建闭包。这样,i 的当前值就会传递给函数,然后无论何时返回响应,都可以使用您想要的值进行响应。
关于node.js - for循环在nodejs中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670602/