Olay Döngüsü
Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 26 / 33.
Geri çağırmalar ve vaatler daha sonra çalışır; ne zaman çalışacaklarını tam olarak bilmemekten kaynaklanan hatalar gizlenir.
Node önce tüm eşzamanlı kodu sonuna kadar çalıştırır. Ardından mikro görevleri çalıştırır: vaat geri çağırmalarını ve queueMicrotask öğesine aktarılan işlevleri. Zamanlayıcılar ancak bundan sonra çalışır. setTimeout(fn, ms), fn işlevini ms milisaniye sonra bir kez çalıştırır. setTimeout(fn, 0) bile mikro görevler bitene kadar bekler.
setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timer0 gecikme, mikro görevlerden sonra mümkün olan en kısa sürede çalışması anlamına gelir; onlardan önce asla çalışmaz. Zamanlayıcılar gecikme sürelerine göre tetiklenir; gecikmeler eşitse önce ayarlanan zamanlayıcı önce çalışır.
Görev
KolayNode kodunu belirli bir sırayla çalıştırır. Önce normal satırlar, sonra promise geri çağırmaları gibi mikro görevler, ardından zamanlayıcılar çalışır. Dört satırın yerlerini değiştirmeden sayı sırasına göre yazdırmak için bu sırayı kullan.
order.js dört satırını 4'ten 1'e doğru yazdırır. Satırları taşıma veya yeniden sıralama. Bunun yerine, üçünü daha sonra çalışacak şekilde sarmala.
console.log('1 sync')satırını olduğu gibi bırak. Normal kod önce çalışır.2 microtasksatırınıqueueMicrotaskile sar; böylece normal kodun hemen ardından çalışır.3 timeoutsatırını ve4 timeout latersatırını ayrı ayrı kendisetTimeoutçağrılarıyla sar.setTimeout(fn, ms),fnişlevinimsmilisaniye sonra bir kez çalıştırır. 4. satır 3. satırdan önce ayarlanır, bu nedenle daha uzun bir gecikmeye ihtiyaç duyar.
node order.js komutu ardından şunu yazdırır:
1 sync
2 microtask
3 timeout
4 timeout laterDeneyin: çalıştırmadan önce sırayı tahmin et. Ardından “Oyna” düğmesine bas; terminalde $ node order.js görünür. Sonra her iki zamanlayıcıya da 0 gecikme verip yeniden çalıştır: artık 4 timeout later, 3 timeout satırından önce yazdırılır; çünkü gecikmeler eşit olduğunda önce ayarlanan zamanlayıcı önce çalışır. “Kontrol et” düğmesine basmadan önce 4. satırdaki uzun gecikmeyi geri koy.
Kendin dene
// Bu satırların yerlerini değiştirmeden numara sırasına göre yazdırılmasını sağlayın.
// Bunun yerine onları queueMicrotask ve setTimeout içine alın.
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Node.js Temelleri bölümündeki tüm dersler
1JavaScript’i Node Üzerinde Çalıştırma
Merhaba, NodeKomutu OkumaKomut Satırı ArgümanlarıKomutlarKendi başına pratik yap: Express playground