2010-03-16 25 views
35

Mam kawałek JavaScript, który sprawdza warunek (przez połączenie AJAX) co n sekund. Jeśli ten warunek jest prawdziwy, przestaje sprawdzać. I wprowadziły go w następujący sposób:Czy można wywołać metodę clearInterval wewnątrz procedury obsługi setInterval?

var stopTimer; 
var timerId = setInterval(function() { 

    /* Make Ajax Calls and set stopTimer */ 

    if (stopTimer) { 
     clearInterval(timerId); 
    } 
}, 10000); 

Jednak uważam, nieprawidłowe działanie: Działa czasami, ale w innym czasie, to ciągle sprawdzając zawsze. Sprawdziłem (o ile to możliwe), że nie ma żadnego błędu w żadnej części kodu.

W związku z tym podejrzewam, że przyczyną może być wywołanie metody clearInterval wewnątrz programu setInterval handler. Czy to prawda? Czy można wywołać metodę clearInterval w module obsługi setInterval?

Dziękuję za uwagę

Odpowiedz

19

Jest bezpieczny. Problem prawdopodobnie polega na tym, że stopTimer nie jest ustawiony zgodnie z oczekiwaniami.

+0

Dzięki. Sprawdzi i podzieli się ustaleniami –

3

Nie sądzę, że wystąpi jakikolwiek problem z kodem, chyba że funkcja AJAX jest błędna. Musisz dbać o powodzenie i odczyty błędów funkcji AJAX, aby nie było problemu z nieusuwaniem pętli.

Sądzę również, że stale odpytujesz serwer w odpowiedzi, a następnie wykonujesz odpowiednią akcję. Do wykonania tego procesu można użyć Reverse AJAX.

+0

Dzięki. Tak, możliwe jest, że czas zakończenia Ajaxu może zakłócać interwał powtarzania ustawiony przez setInterval. Przyjrzymy się temu i podzielimy się ustaleniami –

1

Upewnij się, że nie używasz przypadkowo tej samej nazwy timera w innym miejscu kodu, co spowodowałoby, że zawsze zatrzymasz drugi timer, który zostanie zdefiniowany.

Albo dać timera unikalną nazwę lub zakresu go do funkcji

var timerForAjax = setInterval(function() { 

    /* Make Ajax Calls and set stopTimer */ 

    if (stopTimer) 
    { 
     clearInterval(timerForAjax); 
    } 
}, 10000); 

miałem nieostrożny zadzwonić timer interval i nie zdawali sobie sprawy, że było stworzenie dwóch timerów w takim samym zakresie jak nazywa interval. Obwiniałem system iOS8 przez około godzinę, dopóki nie zdałem sobie sprawy, że nie ma to nic wspólnego z that.

+0

, jeśli to właśnie zrobiliście, to by wyjaśniało, dlaczego to sprawdzało na zawsze –

Powiązane problemy