2014-12-12 24 views
5

Voglio ritardare un "ciclo for" per un po 'ma non so come farlo.ritardo a ciclo for con javascript

Ad esempio. Diciamo che "for loop" va da 0 a 8 e dopo ogni i ci dovrebbe essere un ritardo di 2 sek.

for (var i=0; i<8; i++{ 
    do something... 
    wait for 2 sek. and go on with i=i++; 
} 
+1

Puoi fornire i dettagli di ciò che stai effettivamente cercando di ottenere? È probabile che tu voglia utilizzare setTimeout ma è difficile dirlo senza conoscere il tuo scopo. – DoctorMick

+1

Questo non è possibile in JS. Devi giocare con le funzioni e usare 'setTimeout'. – Teemu

+3

Immagino che questa discussione risponde quello che stai chiedendo http://stackoverflow.com/questions/3583724/how-do-i-add-a-delay-in-a-javascript-loop – user3086684

risposta

8

Dovrete andare in quel modo:

function jsHello(i) { 
 
    if (i < 0) return; 
 

 
    setTimeout(function() { 
 

 
     alert("Hello " + i); 
 

 
     jsHello(--i); 
 

 
    }, 2000); 
 
} 
 

 
jsHello(5);

o

function jsHello(i) { 
 
    alert("Hello " + i); 
 

 
    if (--i > -1) { 
 
     setTimeout(function() { jsHello(i); }, 2000); 
 
    } 
 
} 
 

 
jsHello(5);

2

javascript non ha un comando di attesa. Il modo per ottenere questo comportamento sta usando setTimeout:

for (var i=0; i<8; i++{ 
    do_something(i); 
} 

function do_something(j) { 
    setTimeout(function() { 
     tasks to do; 
    }, 2000 * j); 
} 

Ogni volta che la funzione fa_qualcosa() viene chiamato, esegue "compiti da fare" in programma entro il 2000 * i millisecondi.

+0

avete errore di sintassi nel codice, in più si avrà un insieme di timeout ma all'interno di tutti i callback di timeout sarò uguale a 8 – Evgeniy

+0

Hai ragione. Lo modificherò – jcbermu

1

Per risolvere questo compito è necessario utilizzare la chiusura -invoca immediatamente la funzione witch be called su ogni iterazione con i come param e setTimeout all'interno di questa funzione. In questo caso, il parametro che hai passato verrà archiviato in ambito e potrebbe essere utilizzato in callback timeout:

for (var i=0; i<8; i++) (function(t) { 
    window.setTimeout(function() { 
    //do anything with t 
    }, t*2000) 
}(i))