node.js - for循环在nodejs中无法正常工作

标签 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

有谁能告诉我我哪里错了

谢谢

最佳答案

发生的事情很简单:

您的循环发布了 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/

相关文章:

javascript - 为什么 JavaScript 不获取整个输入框?

node.js - 如何在 sails Controller 中获取当前套接字对象或 id?

javascript - 使用 mongoose 在 mongodb 中查找用户,并将结果返回为 JSON

Node.js包安装错误

java - 方形循环模式

Java 循环结构和 OCAJ7 学习指南

php - 在侧边栏中显示文件夹和子文件夹

node.js - 测试除状态代码之外的响应 header 字段的困难

node.js - 我无法在 Linux VPS 上创建 HTTP/HTTPS 服务器

javascript - 使用 'for' 循环。如何使用 if 语句从值 'i' 中减去?