如何在for循环中设置延迟

时间:2016-10-30 17:42:28

标签: javascript timer

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

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

我的代码结构如下所示:

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

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

3 个答案:

答案 0 :(得分:1)

您可以使用settimeout

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

delayedFunction(5);

答案 1 :(得分:1)

不能在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);

答案 2 :(得分:0)

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

&#13;
&#13;
    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);
&#13;
&#13;
&#13;