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

Zatrzymanie funkcji setInterval

Object Storage Arubacloud
0 głosów
3,039 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ź 313 wizyt
pytanie zadane 19 października 2016 w JavaScript przez Muhin Gaduła (4,120 p.)
0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 26 lipca 2017 w JavaScript przez czujek22 Dyskutant (7,670 p.)
0 głosów
1 odpowiedź 396 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...