queueMicrotask în JavaScript

Cod asincron Browserele moderne, Node.js 11+

Programează o funcție să ruleze imediat după codul curent, înaintea oricărui setTimeout.

Sintaxă
queueMicrotask(() => { ... })

Ce face queueMicrotask

JavaScript are două cozi de sarcini amânate. Microtask-urile (callback-urile promisiunilor și queueMicrotask) rulează imediat ce codul sincron curent se termină. Task-urile (setTimeout, evenimente) rulează abia după ce coada de microtask-uri s-a golit.

queueMicrotask adaugă direct o funcție în coada de microtask-uri, fără să creeze o promisiune. Se folosește rar, de obicei în biblioteci, pentru a grupa mai multe modificări într-o singură actualizare.

Parametri

Parametru Descriere
functie Funcția de rulat.

Ce returnează

undefined.

Exemple

Exemplul 1: Ordinea de execuție

console.log("1. sincron");
setTimeout(() => console.log("5. setTimeout (task)"), 0);
queueMicrotask(() => console.log("3. microtask"));
Promise.resolve().then(() => console.log("4. then (tot microtask)"));
console.log("2. sincron");

Rezultat

1. sincron
2. sincron
3. microtask
4. then (tot microtask)
5. setTimeout (task)

Exemplul 2: O singură salvare pentru mai multe modificări

let programat = false;
const modificari = [];

function modifica(camp) {
  modificari.push(camp);
  if (!programat) {
    programat = true;
    queueMicrotask(() => {
      console.log("salvez o dată:", modificari);
      programat = false;
    });
  }
}

modifica("nume");
modifica("email");
modifica("telefon");

Rezultat

salvez o dată: [ 'nume', 'email', 'telefon' ]

Greșeli frecvente

  • Programezi microtask-uri care programează la rândul lor alte microtask-uri, la nesfârșit. Pagina nu mai ajunge să se redeseneze și pare blocată.

Comenzi înrudite

  • setTimeout / setInterval: Rulează o funcție după o pauză (setTimeout) sau în mod repetat, la intervale egale (setInterval).
  • 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.