Ce face timers/promises (setTimeout cu await)
Modulul node:timers/promises are funcțiile setTimeout, setImmediate și setInterval, dar fără callback. await setTimeout(500) face o pauză de jumătate de secundă, fără new Promise(...) scris de mână. Al doilea argument este valoarea cu care se rezolvă promisiunea.
setInterval întoarce un iterator asincron: îl parcurgi cu for await, iar break oprește intervalul. Toate primesc opțiunea signal de la un AbortController: la anulare, promisiunea este respinsă cu o eroare AbortError.
Funcțiile au aceleași nume ca temporizatoarele globale (setTimeout din browser și Node.js), de aceea mulți le importă cu alt nume: import { setTimeout as pauza } from "node:timers/promises".
Parametri
| Parametru | Descriere |
|---|---|
ms |
Durata în milisecunde. |
valoare |
Valoarea cu care se rezolvă promisiunea (opțional). |
{ signal } |
Un AbortSignal care anulează temporizatorul. |
Ce returnează
O promisiune (setInterval: un iterator asincron).
Exemple
Exemplul 1: Pauză între încercări
Funcția încearcă o operație de trei ori, cu pauză din ce în ce mai mare între încercări.
import { setTimeout as pauza } from "node:timers/promises";
let apeluri = 0;
async function trimiteComanda() {
apeluri++;
if (apeluri < 3) throw new Error("serverul nu răspunde");
return "comanda 1024 trimisă";
}
for (let incercare = 1; incercare <= 3; incercare++) {
try {
console.log(await trimiteComanda());
break;
} catch (eroare) {
console.log(`Încercarea ${incercare}: ${eroare.message}`);
await pauza(incercare * 20);
}
}
Rezultat
Încercarea 1: serverul nu răspunde
Încercarea 2: serverul nu răspunde
comanda 1024 trimisă
Exemplul 2: setInterval ca iterator
import { setInterval } from "node:timers/promises";
let secunde = 3;
for await (const _ of setInterval(10)) {
console.log(`Lansare în ${secunde}...`);
if (--secunde === 0) break;
}
console.log("Start!");
Rezultat
Lansare în 3...
Lansare în 2...
Lansare în 1...
Start!
Exemplul 3: Anulare cu AbortController
import { setTimeout as pauza } from "node:timers/promises";
const ac = new AbortController();
const asteptare = pauza(5000, "gata", { signal: ac.signal });
ac.abort();
try {
await asteptare;
} catch (eroare) {
console.log(eroare.name, eroare.code);
}
Rezultat
AbortError ABORT_ERR
Greșeli frecvente
- Importi
setTimeoutdinnode:timers/promisesfără alt nume, apoi folosești forma vechesetTimeout(fn, 100)în același fișier: acum primul argument trebuie să fie durata. Redenumește importul. - Uiți
await:pauza(1000)fărăawaitnu oprește nimic, codul continuă imediat.
Comenzi înrudite
EventEmitter (node:events): Clasa pentru evenimente din Node.js: înregistrezi ascultători cu on și îi declanșezi cu emit. Baza pentru stream-uri și servere.worker_threads (Worker): Rulează cod JavaScript în fire de execuție separate, ca un calcul greu să nu blocheze restul programului.util.promisify: Transformă o funcție cu callback în stil Node.js (eroare, rezultat) într-o funcție care întoarce o promisiune.