2016-10-30 84 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);