setInterval() / clearInterval()

0

Panowie szybkie pytanie, ponieważ mam mały problem.
Kod jest następujący:

var myModule = (function() {


  var _fun = function() {
      console.log('dummy content');
  };

  var _init = function() {
    _fun();
  };

  return {
    init: _init,
  }

})();

setInterval(myModule.init, 1000);

Pytanie jak osiągnąć efekt, że wywołuję w interwale funkcję co 1s, potem chciałbym ten interwał czyścić i znowu wywołać tą funkcję i tak w kółko.
Z góry dziękuję za sugestie.

0

Czekaj, czekaj. Chcesz wywoływać funkcję co sekundę? To po jasną cholerę czyścić interwał?

0

Każdy nowy interwał to nowy licznik, więc jeśli go nie wyczyścisz to co raz bardziej obciążasz przeglądarke

0

Nie bardzo rozumiem. Jaka jest różnica pomiędzy poniższymi:

// a)
function foo () {}
setInterval(foo, 1000);

// b)
function foo () {
 // zrób coś tam
 clearInterval(id);
 id = setInterval(foo, 1000);
}
var id = setInterval(foo, 1000);
1

Na pierwszy rzut oka różnią się nadmiarowym kodem. Jednak jest jedna różnica, która jest bardzo istotna. Pierwsza wersja kodu spowoduje, że foo() będzie wołane co około sekundę (chyba, że silnik js będzie zajęty czym innym, to wtedy dłużej). Druga wersja będzie wywoływać się co około sekundę + czas wykonania foo() oraz ma jeden niebezpieczny błąd. Otóż jeśli kod foo() będzie wywoływać się dłużej, niż długość interwału, to zanim zostanie wywołane clearInterval nastąpi zakolejkowanie kolejnego wywołania foo, a to doprowadzi do niekontrolowanego rozmnożenia wywołań foo().
Dlatego 1) nigdy clearInterval() w środku obsługi tyknięcia interwału 2) jeśli potrzebujesz 1s od zakończenia obsługi tyknięcia, to użyj setTimeout().
Jest jeszcze jedna, tym razem drobna różnica - jeśli poleci wyjątek, to clearInterval/setInterval nie wykona się.

Jeśli z pewnych powodów chcesz za każdym razem ustawiać od nowa kolejne wywołanie, to użyj setTimeout.

1 użytkowników online, w tym zalogowanych: 0, gości: 1