我有这段代码,应该每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/

10-12 14:48