Menu
CoddyTech

Pętla zdarzeń

Część sekcji Podstawy Node.js ścieżki Node.js w Coddy. Lekcja 18 z 24.

Wywołania zwrotne i obietnice wykonują się później, a błędy kryją się w niewiedzy, kiedy dokładnie to następuje.

Node najpierw wykonuje cały kod synchroniczny do końca. Następnie wykonuje mikrozadania: wywołania zwrotne obietnic oraz funkcje przekazane do queueMicrotask. Dopiero potem przychodzą timery, nawet setTimeout(fn, 0) — każdy wtedy, gdy upłynie jego czas.

setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timer

Opóźnienie 0 oznacza, że coś nastąpi tak szybko, jak to możliwe po mikrozadaniach, nigdy przed nimi. Timery uruchamiają się w kolejności opóźnienia; przy jednakowych opóźnieniach jako pierwszy uruchamia się timer ustawiony wcześniej.

challenge icon

Wyzwanie

Łatwy
  • order.js wypisuje 1 sync, 2 microtask, 3 timeout, 4 timeout later w tej kolejności.
  • Pozostaw te cztery linie na swoich miejscach. Owiń je w jedno wywołanie queueMicrotask i dwa wywołania setTimeout.

Uruchom node order.js i porównaj wynik ze swoim przypuszczeniem. Następnie ustaw opóźnienie obu timerów na 0 i uruchom ponownie.

Spróbuj swoich sił

// Spraw, aby te linie wypisywały się w kolejności numerów, bez zmieniania ich położenia.
// Zamiast tego umieść je w wywołaniach queueMicrotask i setTimeout.
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy Node.js