javascript - 无法在此 Node 中添加超时 http get 请求

标签 javascript node.js settimeout

我有这段代码,其中应该每 5 秒调用一次函数 download,但它似乎不起作用,因为所有图像都是同时下载的。

const download = function (uri, filename, callback) {
  request.head(uri, function (err, res, body) {
    request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); 
   });
};

for (let i = 0; i < 100; i++) {
  setTimeout(function () {
    download(
      'https://www.thispersondoesnotexist.com/image', 
      `images/image${i}.jpg`,
      function () {
        console.log('done');
      });
    },
    5000
  )
}

最佳答案

您的 setTimeout 函数是用 5000 硬编码的。这意味着您的循环从 0 运行到 99,并设置了 100 个超时,每个超时的等待时间为 5000。由于循环执行得非常快,因此执行的超时也非常接近。

你需要这样的东西:

 setTimeout(function() {
   ...
   },
   5000 * i
 )

这会将超时从 0 * 5000 分散到 99 * 5000 毫秒。

关于javascript - 无法在此 Node 中添加超时 http get 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62051032/

相关文章:

javascript - Nan 在检查第三个参数解释时返回

node.js - 未授权从 Mongoose 驱动程序查询 Mongodb 分片

javascript - 如果我有一个字符串形式的 mongo 文档 ID,我该如何将其作为 _id 查询?

javascript - clearInterval 不起作用,间隔未定义

javascript - php - javascript - ajax 中的特殊字符

javascript - MSHTML - 自动点击 JavaScript 确认对话框

jquery - setTimeout()和设置参数

javascript - JQuery 在 5,10,15...55 整点后每 5 分钟运行一次

javascript - 创建简单的游戏但 Canvas 上什么也没有显示

javascript - 如何将 ReactJS 添加到现有的 node.js 后端应用程序