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.