2016-10-30 2 views
0

Итак, у меня есть цикл for, и там есть одна строка кода, которая открывает URL-адрес для итераций друг друга. Я бы хотел, чтобы эта строка открывала URL-адрес, чтобы подождать 2 секунды, прежде чем открывать их. Как мне это сделать?Как установить задержку внутри цикла for

Я попробовал функцию setTimeout, но после итерации она повторяется через весь цикл, но я хочу, чтобы она дождалась каждой итерации, а не только перед итерацией или во время первой.

Структура моего кода выглядит примерно так:

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

Как бы я сделать его подождать 2 секунды для каждой итерации перед выполнением, что одной конкретной строке, где она открывает URL? Ни один из других вопросов, похоже, не помогает мне, поэтому мне было интересно, сможет ли кто-нибудь помочь.

+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 или реклама, лучший способ ... – mike510a

1

Вы можете использовать SetTimeout

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

 
delayedFunction(5);

1

Вы не можете сделать это в цикле. Вы можете сделать это с помощью 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);

Смежные вопросы