2016-10-30 43 views
0

因此,我有一个for循环,并且在那里有一行代码为每个其他迭代打开一个URL。我希望打开URL的那一行在打开每一行前等待2秒钟。我会怎么做?如何在for循环中设置延迟

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

我的代码的结构看起来是这样的:

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

我怎么会让它执行该它打开URL一个具体的行前等待2秒,每次迭代?其他问题似乎没有帮助我,所以我想知道是否有人可以提供帮助。

+0

到底为什么你想这样做呢?这里的用例是什么? – mike510a

+0

@ mike510a我的程序一次打开多个URL,我只想要一个小小的延迟,因此网站服务器不必同时处理所有请求。 – btrballin

+0

也许这个链接将有助于:http://stackoverflow.com/questions/36637772/how-to-settimeout-inside-a-loop – pwet

回答

0

这不是一个非常好的做法(在一段时间内打开多个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);

+0

请注意,这不会阻止计时器到达结束后 - 但它将不会再打开任何窗口..计时器实际上会继续运行,直到正确执行clearTimeout()' – mike510a

+0

为什么不这么做? – btrballin

+0

确实有更好的方式来做任何你想做的事情,通过打开多个URL--无论是EventSource还是ads,这是一种更好的方式... – mike510a

1

可以使用的setTimeout

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

 
delayedFunction(5);

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);