Sobes.tech
Middle

Mis on makro- ja mikroülesanded?

sobes.tech AI

Vastus AI-lt

Mikrozadadused — need on väiksemad, üksikasjalikumad tegevused, mis toimuvad pärast praeguse makrozadaduse lõppu ja enne järgmise algust. Nende hulka kuuluvad Promise töötlemine, MutationObserver, queueMicrotask.

Peamine erinevus on see, et mikrozadadused täidetakse alati kohe pärast praegust makrozadadust, samas kui järgmine makrozadadus (näiteks järgmine renderi raam või setTimeout) täidetakse alles siis, kui mikrozadaduste järjekord on tühi.

Täitmisahel näites:

// Makrozadadus (algne kood)
console.log('Algus');

// Makrozadadus (ajastaja)
setTimeout(() => {
  console.log('Ajastaja');
}, 0);

// Mikrozadadus (promise)
Promise.resolve().then(() => {
  console.log('Promise');
});

// Makrozadadus (koodi lõpp)
console.log('Lõpp');

Konsoli väljund:

Algus
Lõpp
Promise
Ajastaja

Täitmisahel:

  1. Täidetakse põhimakrozadus (peaskript).
  2. console.log('Algus').
  3. setTimeout lisab makrozadaduse järjekorda.
  4. Promise.resolve().then() lisab mikrozadaduse järjekorda.
  5. console.log('Lõpp').
  6. Põhimakrozadus on lõpetatud.
  7. Kontrollitakse mikrozadaduste järjekorda ja täidetakse Promise.resolve().then().
  8. console.log('Promise').
  9. Mikrozadaduste järjekord on tühi.
  10. Brauser töötleb sündmuste tsüklit ja liigub järgmise makrozadaduse juurde.
  11. Täidetakse setTimeout makrozadadus.
  12. console.log('Ajastaja').
  13. Makrozadadus on lõpetatud.

See arusaam on oluline asünkroonsete operatsioonide täitmisahelate juhtimiseks ja Event Loop töö mõistmiseks.