2016-10-30 1 views
0

So habe ich eine for-Schleife und es gibt eine Zeile Code, der eine URL für jede andere Iterationen öffnet. Ich möchte, dass die Zeile, die die URL öffnet, 2 Sekunden wartet, bevor sie geöffnet wird. Wie würde ich es tun?Wie setze ich eine Verzögerung innerhalb einer for-Schleife

Ich habe versucht, die setTimeout-Funktion, aber es durchläuft sofort die gesamte Schleife nach dem Warten auf die angegebenen Sekunden, aber ich möchte es für jede Iteration warten, nicht nur vor der Iteration oder während der ersten.

Die Struktur meiner Code sieht etwa so aus:

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

Wie würde ich es 2 Sekunden für jede Iteration warten, bevor, dass eine bestimmte Zeile ausgeführt wird, wo es die URL öffnet? Keine der anderen Fragen scheint mir zu helfen, also habe ich mich gefragt, ob jemand helfen könnte.

+0

Warum in aller Welt würden Sie jemals das tun wollen? Was ist der Anwendungsfall hier? – mike510a

+0

@ mike510a Mein Programm öffnet mehrere URLs auf einmal und ich möchte nur eine kleine Verzögerung, damit der Website-Server nicht alle Anfragen gleichzeitig bearbeiten muss. – btrballin

+0

Vielleicht hilft dieser Link: http://stackoverflow.com/questions/36637772/how-to-settimeout-inside-a-loop – pwet

Antwort

0

Nicht, dass dies eine sehr gute Praxis ist (Öffnen mehrerer URLs in einem Intervall), aber seit Sie gefragt haben.

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

Beachten Sie, dass dies den Timer nicht stoppen wird, nachdem er das Ende erreicht hat - aber es öffnet keine Fenster mehr .. der Timer wird tatsächlich weiter laufen bis Sie 'clearTimeout()' richtig machen – mike510a

+0

Warum ist es nicht gut, das zu tun? – btrballin

+0

Es gibt sicherlich einen besseren Weg zu tun, was auch immer Sie tun, indem Sie mehrere URLs öffnen - ob es EventSource oder Anzeigen ist, gibt es einen besseren Weg ... – mike510a

1

können Sie SetTimeout

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

 
delayedFunction(5);

1

verwenden Sie dieser for-Schleife in eine nicht tun können. Sie können dies mit setInterval() tun. Die setInterval() Methode wird fortgesetzt, bis clearInterval() aufgerufen wird.

Struktur

var interval = setInterval(function() { 
    var i = 0; 
    if(i < x) { 
     ... 
    } else { 
     clearInterval(interval); 
    } 
}, ms); 

Beispiel

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

Verwandte Themen