IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Funkce s setInterval se provolává pouze jednou.

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Novák
Člen
Avatar
Petr Novák:22.10.2017 12:25

Ahojte, píšu menší redakční systém kde administrátor může uzavírat vlákna. Chci docílit efektu, že se při uzavření vlákna vypíše zpráva, která se bude měnit každou sekundu. Snažím se to splácat následovně:

var seconds = 5;
var interval;
function deleteStatus () {
    interval = setInterval(statusDeleted(), 1000);
    window.scrollTo(0, 0);
});
function statusDeleted()
{
    console.log('status called');
    if(seconds != 0)
    {
        $('#snippet--flash-messages').html('<div class="alert alert-warning">' +
            'Vlánko bylo administrátorem smazáno. K přesměrování dojde za ' + seconds + ' sekund ...</div>');
        seconds--;
    }
    else
    {
        $(location).attr('href', 'http://localhost/server/diskuze');
        console.log('redirect');
    }
}

v konzoli to žádné chyby nepíše a funkce statusDeleted se zavolá vždy jen jednou ... nevíte jak to opravit prosím ?
Předem moc díky za rady!

 
Odpovědět
22.10.2017 12:25
Avatar
David Klouček:22.10.2017 13:01
interval = setInterval(statusDeleted, 1000);
 
Nahoru Odpovědět
22.10.2017 13:01
Avatar

Člen
Avatar
Odpovídá na Petr Novák
:22.10.2017 14:45

Ten kód je celý zle. Funkcia statusDeleted sa ti odvoláva na externú, navyše globálnu premennú, interval zbytočne ukladáš do ďalšej premennej, hoci ho nijak neklíruješ a ešte aj bude tá funkcia naprosto nepresná kvôli povahe setInterval. Celé prepísať. Callbacku statusDeleted aplikovať pri volaní aktuálny timestamp. Sám o sebe nech je closure a nech si timestamp zapamätá a porovná s predošlým, či od posledného volania ubehlo 5 sekúnd, alebo nie a podľa toho zobraziť alert, alebo presmerovať.

Editováno 22.10.2017 14:46
 
Nahoru Odpovědět
22.10.2017 14:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.