【问题标题】:How to set a delay inside a for loop如何在 for 循环中设置延迟
【发布时间】:2016-10-31 03:25:51
【问题描述】:

所以我有一个 for 循环,其中有一行代码为彼此的迭代打开一个 URL。我希望打开 URL 的那一行在打开每个 URL 之前等待 2 秒。我该怎么做?

我尝试了 setTimeout 函数,但它在等待指定的秒数后立即迭代整个循环,但我希望它等待每次迭代,而不仅仅是在迭代之前或在第一次迭代期间。

我的代码结构如下所示:

function someFunction(){
// do something
for(i = 0; i < range; i++){
//do something
//**open URL**
//do something
   }
}

在执行打开 URL 的特定行之前,如何让它在每次迭代中等待 2 秒?其他问题似乎都没有帮助我,所以我想知道是否有人可以提供帮助。

【问题讨论】:

  • 你到底为什么要这样做?这里的用例是什么?
  • @mike510a 我的程序一次打开多个 URL,我只想要一点延迟,这样网站服务器就不必同时处理所有请求。
  • 也许这个链接会有所帮助:stackoverflow.com/questions/36637772/…

标签: javascript timer


【解决方案1】:

你可以使用 settimeout

function delayedFunction(counter){
  counter--;
  console.log(counter);
  if(counter){
    setTimeout(function(){delayedFunction(counter); }, 1000);
  }
}

delayedFunction(5);

【讨论】:

    【解决方案2】:

    不能在 for 循环中执行此操作。您可以使用setInterval() 执行此操作。 setInterval() 方法将一直持续到 clearInterval() 被调用。

    结构

    var interval = setInterval(function() {
        var i = 0; 
        if(i < x) {
            ...
        } else {
            clearInterval(interval);
        }
    }, ms);
    

    示例

    var urls = ["url1", "url2", "url3", "url4"];
    
    function showDelayed(arr, ms) {
      var i = 0;
      var interval = setInterval(function() {
        if (i < arr.length) {
          // Do something here
          console.log(arr[i]);
        } else {
          clearInterval(interval); // Clear when i === arr.length
        }
        i += 1; // Interval increments 1
      }, ms);
    }
    
    showDelayed(urls, 300);

    【讨论】:

      【解决方案3】:

      这并不是一个很好的做法(在一个时间间隔内打开多个 URL), 但既然你问了。

          var urlarray = ["https://www.mysite1.com", "https://www.mysite2.com", "https://www.mysite3.com"];
      
          var currentURL = 0;
      
          setInterval(function() {
      
            if (currentURL < urlarray.length) {
              alert(urlarray[currentURL]);
            }
            currentURL++;
          }, 1500);

      【讨论】:

      • 请注意,这不会阻止计时器在到达终点后继续运行——但它不会再打开任何窗口。计时器实际上会继续运行,直到您正确执行clearTimeout()
      • 通过打开多个 URL,无论您正在做什么,肯定有更好的方法——无论是 EventSource 还是广告,都有更好的方法...
      • 取决于脚本的真正目的是什么
      • 基本上,URL 会附加一个日期。通过仅增加 URL 的日期部分并打开它,它会在所有这些天执行一些操作。该操作对这个问题不重要
      猜你喜欢
      • 2023-03-13
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多