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 timerOpóź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.
Wyzwanie
Łatwyorder.jswypisuje1 sync,2 microtask,3 timeout,4 timeout laterw tej kolejności.- Pozostaw te cztery linie na swoich miejscach. Owiń je w jedno wywołanie
queueMicrotaski dwa wywołaniasetTimeout.
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');
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy Node.js
1Uruchamianie JavaScript w Node
Witaj, NodeArgumenty wiersza poleceńPolecenia