【问题标题】:Javascript only running half of loopJavascript 只运行一半的循环
【发布时间】:2016-09-26 04:26:34
【问题描述】:

我正在使用 Node.js,我有一个如下所示的循环:

var request = require('request');

for(var i = 0; i< some_number; i++){
 console.log(i); 
 request( url.concat(i), function(error, response, body){
 if(!error){console.log("ABC" + i)}
 else{
 console.log(error);
 });

}

它在运行request 之前返回0some_number-1,我不确定发生了什么。我正在使用request module

【问题讨论】:

  • 你的 some_function 是异步的
  • @Tushar 已编辑,Juvian,我不确定这是什么意思。
  • 异步接口允许脚本在其工作时继续运行,并在完成时调用回调函数。这是 Node 进行所有 I/O 的方式。您可能会发现 this chapter 很有趣。在不知道什么是异步的情况下使用 Node 似乎是错误的。
  • 这很有意义,是的,我知道 - 我只需要进行一些网络抓取,它似乎是正确的工具。

标签: javascript node.js closures


【解决方案1】:

当您发出请求时,返回需要时间,但循环不会等待它,它会继续进行。这种异步特性是 Javascript 的主要原则之一。

如果您想在继续循环之前等待每个请求,可以尝试以下操作:

function iterator(i) {
  if (i < some_number) {
    request(url.concat(i), function(err, response, body) {
      if (err) console.log(err);
      iterator(i + 1);
    });
  }
}
// Kick off the loop
iterator(0);

【讨论】:

  • iterator 就是我给这个函数起的名字,它本质上是一个同步的for 循环。在 if 语句中是每次通过时执行的内容。
猜你喜欢
  • 2022-10-14
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多