Node.js For循环在nodejs中工作不正常

Node.js For循环在nodejs中工作不正常,node.js,for-loop,Node.js,For Loop,我在for循环中使用diffbotapi 这是我的密码 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) { co

我在for循环中使用diffbotapi

这是我的密码

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  */
        }
    });
}
200次。

预计产量为0至199

有人告诉我哪里错了吗


谢谢

发生的事情很简单:

你的循环生成200个帖子。对每个post异步执行响应,这意味着所有post都可以在第一个响应到达时完成,执行回调函数。因此,到那时,
i==200

在你的评论之后,我会详细阐述一下:

您需要一个闭包,以便在收到响应时保持当前值
i
,如fzzle的回答中所述:

 diffbot.article({ uri: url }, (function(i) { 
         return function(err, response) {
         ... }
     })(i)); 
将回调函数封装在
函数(i){…}
中会创建闭包。通过这种方式,i的当前值被传递给函数,然后在该响应返回时,可以使用所需的值进行响应。

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

这就行了。

为什么我们需要clousure。。你能在声明
console.log(i)之前解释一下吗已执行,由于异步回调,
i
的值为200。您需要一个闭包来“保留”时间语句中所需的
i
diffbot.article(…)
executed为什么添加函数(i){这里。你能帮我吗explain@Kamalpreet请参阅。简短回答:闭包。@Kamalpreet,他确实理解你的问题。。你不理解。我理解了,谷歌搜索异步和闭包。@fzzle的答案是你需要做什么来修复你的代码。可能是我错了。。为什么我们需要异步和闭包。你的代码已经是异步的,所以你需要一个闭包来保持异步当您得到响应时,i的当前值。您能解释一下吗,您如何知道我的代码是异步的,以及为什么我们需要闭包
 for (var i = 0; i < 200; ++ i) {
     diffbot.article ({ uri: url }, (function (i) { 
         return function (err, response) { ... }
     })(i)); 
 }