For loop在nodejs中无法正常工作

时间:2014-10-31 08:49:52

标签: node.js for-loop

我在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

有没有人告诉我哪里错了

由于

2 个答案:

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

这样可行。