2014-12-12 35 views
5

Chcę opóźnić "pętlę for" na chwilę, ale nie wiem jak to zrobić.opóźnienie pętli for z javascript

Na przykład. Powiedzmy, że ta "pętla for" działa od 0 do 8, a po każdej i powinna nastąpić zwłoka dla 2 sek.

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

Czy możesz podać szczegóły tego, co faktycznie chcesz osiągnąć? Prawdopodobnie będziesz chciał użyć setTimeout, ale ciężko powiedzieć bez znajomości celu. – DoctorMick

+1

To nie jest możliwe w JS. Musisz grać z funkcjami i używać 'setTimeout'. – Teemu

+3

myślę, że ten wątek odpowiada co prosicie http://stackoverflow.com/questions/3583724/how-do-i-add-a-delay-in-a-javascript-loop – user3086684

Odpowiedz

8

Będziesz musiał iść tamtędy:

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

 
    setTimeout(function() { 
 

 
     alert("Hello " + i); 
 

 
     jsHello(--i); 
 

 
    }, 2000); 
 
} 
 

 
jsHello(5);

lub

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

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

 
jsHello(5);

2

javascript nie ma polecenia wait. Sposób, aby uzyskać to zachowanie używa setTimeout:

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

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

Everytime do_something funkcja() jest wywoływana, wykonuje "zadania do zrobienia" zaplanowane przez 2000 * Wyrażam milisekund.

+0

masz błąd składni w kodzie, w wyniku czego będziesz mieć ustawione limity czasu, ale we wszystkich callbackach timeoutowych będę równy 8 – Evgeniy

+0

Masz rację. Zmienię to. – jcbermu

1

Aby rozwiązać to zadanie, trzeba użyć zamknięcie - Natychmiast wywołaj funkcję, która będzie wywoływana w każdej iteracji z i jako parametr i setTimeout wewnątrz tej funkcji. W takim przypadku przesłany przez Ciebie parametr zostanie zapisany w zakresie i może być używany w połączeniu zwrotnym:

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