setTimeout / setInterval în JavaScript

Cod asincron Toate browserele, Node.js

Rulează o funcție după o pauză (setTimeout) sau în mod repetat, la intervale egale (setInterval).

Sintaxă
setTimeout(functie, milisecunde)
setInterval(functie, milisecunde)

Ce face setTimeout / setInterval

setTimeout programează o funcție să ruleze o singură dată, după numărul de milisecunde dat (1000 ms = 1 secundă). setInterval o rulează iar și iar, la același interval.

Codul de după setTimeout nu așteaptă: continuă imediat, iar funcția programată rulează mai târziu. Ambele returnează un identificator, cu care oprești programarea prin clearTimeout sau clearInterval.

Parametri

Parametru Descriere
functie Funcția de rulat.
milisecunde Pauza în milisecunde. Implicit 0.

Ce returnează

Un identificator al programării, folosit la anulare.

Exemple

Exemplul 1: Codul nu așteaptă

console.log("1. Început");

setTimeout(() => {
  console.log("3. După 500 ms");
}, 500);

console.log("2. Sfârșit");

Rezultat

1. Început
2. Sfârșit
3. După 500 ms

Exemplul 2: Numărătoare inversă cu setInterval

let secunde = 3;

const cronometru = setInterval(() => {
  console.log(secunde);
  secunde--;
  if (secunde === 0) {
    clearInterval(cronometru);
    console.log("Start!");
  }
}, 200);

Rezultat

3
2
1
Start!

Exemplul 3: Anularea unei programări

const mesaj = setTimeout(() => console.log("Nu apare"), 1000);

clearTimeout(mesaj);
console.log("Programare anulată");

Rezultat

Programare anulată

Greșeli frecvente

  • Scrii setTimeout(functie(), 1000), cu paranteze. Funcția rulează imediat, iar ce returnează ea este programat. Dă funcția fără să o apelezi: setTimeout(functie, 1000).
  • Pornești un setInterval și nu îl oprești niciodată. Funcția rulează la nesfârșit, chiar și după ce nu mai ai nevoie de ea.

Comenzi înrudite

  • Promise / then: O promisiune reprezintă un rezultat care va veni mai târziu: o cerere la server, un fișier citit, o pauză.
  • async / await: Scrie cod asincron care se citește ca un cod obișnuit, de sus în jos.