我在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
有没有人告诉我哪里错了
由于
答案 0 :(得分:3)
发生的事情很简单:
你的循环发布了200个帖子。响应以异步方式为每个帖子执行,这意味着所有帖子可以在第一个响应到达时执行,执行回调函数。因此,到那时为i==200
。
在评论后稍微阐述一下:
当你得到回复时,你需要一个闭包来保持i
的当前值,如fzzle的答案中所述:
diffbot.article({ uri: url }, (function(i) {
return function(err, response) {
... }
})(i));
在function(i){ ... }
中包含回调函数会创建闭包。这样,i的当前值被传递给函数,然后只要这个响应返回,就可以用你想要的值进行响应。
答案 1 :(得分:2)
for (var i = 0; i < 200; ++ i) {
diffbot.article ({ uri: url }, (function (i) {
return function (err, response) { ... }
})(i));
}
这样可行。