Kiedy wykona się zwykły kod, Promise.then i setTimeout?
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Najpierw kończy się aktualny kod synchroniczny. Reakcje na rozstrzygnięte Promise trafiają do kolejki tak zwanych mikrozadań, obsługiwanej przed wieloma innymi rodzajami pracy. Timer może zostać obsłużony dopiero po upływie wskazanego czasu i wtedy, gdy środowisko ma na to możliwość.
W prostym przykładzie console.log('A'); Promise.resolve().then(() => console.log('B')); setTimeout(() => console.log('C'), 0) zobaczymy A, potem B i C. Zero przy timerze nie oznacza „natychmiast”. Dla dodatkowych mechanizmów Node, takich jak nextTick i setImmediate, trzeba uwzględnić kontekst i wersję. Nie warto bez tego recytować jednego porządku dla wszystkich programów.
Dlaczego to ważne: Klasyczne pytanie fundamentowe i źródło błędów w testach czasu.
Możliwe dopytania: Dlaczego wiele mikrozadań może opóźnić obsługę sieci?
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.
Zacznij od
- B-P03 · Co to jest event loop, czyli pętla zdarzeń? — JavaScript, TypeScript i Node.js
- B-P04 · Co to jest Promise? — JavaScript, TypeScript i Node.js
Powiązane pytania
- Kolejność: kod synchroniczny, Promise.then i setTimeout — JavaScript, TypeScript i Node.js
Dalsza lektura
- Node.js: The Event Loop(otwiera się w nowej karcie)Docs; dostęp 22.10.2026. Fazy event loop, timery i zależności od wersji Node/libuv.