所以我有一个for循环,其中有一行代码可以为每个其他迭代打开一个URL。我希望打开URL的那一行在打开每个URL之前等待2秒。我该怎么办?
我尝试了setTimeout函数,但它在等待指定的秒后立即迭代整个循环,但是我希望它等待每次迭代,而不是在迭代之前或在第一次迭代之前。
我的代码结构如下所示:
function someFunction(){
// do something
for(i = 0; i < range; i++){
//do something
//**open URL**
//do something
}
}
在执行打开URL的特定行之前,如何让每次迭代等待2秒?没有其他问题似乎对我有帮助,所以我想知道是否有人可以提供帮助。
答案 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), 但既然你问过。
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;