• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zatrzymanie funkcji setInterval

Cloud VPS
0 głosów
3,667 wizyt
pytanie zadane 20 lutego 2018 w JavaScript przez sosick Nowicjusz (160 p.)

Poznaję funkcje seInterval i setTimeout i mam mały problem z bardzo prostym zadaniem. Oto jego treść:

Napisz funkcję ```boilEgg```, która jako argument przyjmie czas w sekundach, a jej wywołanie spowoduje, że po zadanym czasie na konsoli wyświetli się komunikat "jajko ugotowane".
Dodatkowo co 5 sekund, podczas gotowania w konsoli wyświetl napis "jajko się gotuje".
Przetestuj swoją funkcję dla 30 sekund (czas gotowania).

Mój kod póki co wygląda tak: 

function boilEgg(seconds) {
    setInterval(function() {
        seconds -= 5;
        if (seconds === 0) {
            console.log('jajko ugotowane');
        } else {
            console.log('jajko się gotuje');
        }
    }, 5000);
}

boilEgg(30);

I o ile do pewnego momentu funkcja działa prawidłowo, to nie potrafię zrobić, aby po 'jajko ugotowane' przestała się wykonywać. Próbowałem użycia clearInterval, jednak w żadnym miejscu w którym go użyłem nie działał, na przykład:

function boilEgg(seconds) {
    setInterval(function boil() {
        seconds -= 5;
        if (seconds === 0) {
            console.log('jajko ugotowane');
            clearInterval(boil);
        } else {
            console.log('jajko się gotuje');
        }
    }, 5000);
}

boilEgg(30);

Będę wdzięczny za olśnienie mnie, bo jest to z pewnością banalny problem przy którym utknąłem dłuższą chwilę.

komentarz 20 lutego 2018 przez Maniek Bywalec (2,170 p.)

Nie znam się na js, ale po chwili czytania w internecie wnioskuje że clearInterval() działa na nazwe inreval czyli 

var myVar = setInterval(function(){ setColor() }, 300);

function setColor() {
    var x = document.body;
    x.style.backgroundColor = x.style.backgroundColor == "yellow" ? "pink" : "yellow";
}

function stopColor() {
    clearInterval(myVar);
}

 

1 odpowiedź

+2 głosów
odpowiedź 20 lutego 2018 przez ScriptyChris Mędrzec (190,190 p.)

Metoda setInterval (podobnie jak jej "odpowiednik" setTimeout) zwraca identyfikator, który musisz przekazać do clearInterval, aby ją zatrzymać.

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearInterval

Zatem najpierw potrzebujesz zapisać sobie ten identyfikator:

var intervalId = setInterval(function boil() {

, a następnie przekazać go do clearInterval:

clearInterval( intervalId );

 

P.S. Nie ma w Twoim kodzie potrzeby nazywania funkcji jako boil (zostaw ją anonimową), ponieważ nie wywołujesz jej nigdzie - a do zatrzymania interwału nie jest Ci to potrzebne.

komentarz 20 lutego 2018 przez sosick Nowicjusz (160 p.)
edycja 20 lutego 2018 przez sosick

Edit:

Udało się. Poniższa funkcja działa tak jak określa to zadanie:

function boilEgg(seconds) {
    var boil = setInterval(function () {
        seconds -= 5;
        if (seconds === 0) {
            console.log('jajko ugotowane');
            clearInterval(boil);
        } else {
            console.log('jajko się gotuje');
        }
    }, 5000);
}

boilEgg(30);

Dziękuję za pomoc!

komentarz 20 lutego 2018 przez ScriptyChris Mędrzec (190,190 p.)

var boil

Dla lepszej czytelności nadałbym nazwę np. boilIntervalId, żeby jednak sugerowała wskazywanie na identyfikator interwału.

Podobne pytania

0 głosów
1 odpowiedź 580 wizyt
pytanie zadane 19 października 2016 w JavaScript przez Muhin Gaduła (4,120 p.)
0 głosów
1 odpowiedź 397 wizyt
pytanie zadane 26 lipca 2017 w JavaScript przez czujek22 Dyskutant (7,670 p.)
0 głosów
1 odpowiedź 477 wizyt

93,456 zapytań

142,452 odpowiedzi

322,722 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...