Mikro Görevlar ve Promise'ler
Promise geri çağrılarının neden önce çalıştığını öğrenin.
Mikro Görevlar ve Promise'ler, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 4 dersten oluşur.
Mikro Görev Nedir?
mikro görev, yüksek öncelikli ertelenmiş bir iştir. Vaat geri çağırmaları (.then, .catch, .finally) ve queueMicrotask mikro görevleri zamanlar.
Temel kural şudur: her eşzamanlı çalıştırmadan sonra, herhangi bir makro görevden önce tüm mikro görevler tüketilir.
Vaat Geri Çağırmaları Ertelenir
Zaten çözümlenmiş bir vaat bile .then geri çağırmasını mikro görev olarak zamanlar. Bu geri çağırma eşzamanlı olarak çalışmaz.
console.log('start');
Promise.resolve().then(() => console.log('promise then'));
console.log('end');Mikro Görevler Makro Görevleri Geçer
Bu, en önemli sıralama kuralıdır. Bir vaat geri çağırması, zamanlayıcı daha önce zamanlanmış olsa bile setTimeout geri çağırmasından önce çalışır.
setTimeout(() => console.log('timeout (macro)'), 0);
Promise.resolve().then(() => console.log('promise (micro)'));
console.log('sync');Mikro Görev Kuyruğu Tamamen Tüketilir
Olay döngüsü, sonraki makro görevi almadan önce mikro görev kuyruğunun tamamını boşaltır. Birden çok vaat geri çağırması bu tüketim sırasında art arda çalışır.
setTimeout(() => console.log('macro'), 0);
Promise.resolve().then(() => console.log('micro 1'));
Promise.resolve().then(() => console.log('micro 2'));
console.log('sync');Zincirlenmiş Vaatler
Zincirdeki her .then, kendisinden önceki işlem tamamlandığında yeni bir mikro görev zamanlar. Yine de bekleyen herhangi bir zamanlayıcıdan önce çalışırlar.
setTimeout(() => console.log('timeout'), 0);
Promise.resolve()
.then(() => console.log('then 1'))
.then(() => console.log('then 2'))
.then(() => console.log('then 3'));
console.log('sync');Tüketim Sırasında Zamanlanan Mikro Görevler
Bir mikro görev başka bir mikro görev zamanlarsa, yeni görev de aynı tüketim sırasında ve herhangi bir makro görevden önce çalışır. Kuyruk tamamen boşalana kadar boşaltılmaya devam eder.
Promise.resolve().then(() => {
console.log('micro A');
Promise.resolve().then(() => console.log('micro B (added later)'));
});
setTimeout(() => console.log('macro'), 0);
console.log('sync');Çözümlenen Değerler Aktarılır
Bir .then işleyicisinden döndürülen değer, zincirdeki sonraki işleyicinin girdisi olur; bunların tamamı mikro görevler aracılığıyla gerçekleşir.
Promise.resolve(2)
.then(n => n * 3)
.then(n => n + 1)
.then(n => console.log('result', n));
console.log('sync first');Eşzamansız/Bekleme Mikro Görevleri Kullanır
Bir await sonrasındaki kod mikro görev olarak devam eder. Bu nedenle beklenen devam işlemi, daha önce zamanlanmış bir zamanlayıcıdan önce çalışır.
async function run() {
console.log('a');
await null;
console.log('c (after await)');
}
setTimeout(() => console.log('d (timeout)'), 0);
run();
console.log('b');Birleşik Sıralama Gösterimi
Hepsini bir araya getirin. Sırayı tahmin edin: önce eşzamanlı işlemler, ardından tüm mikro görevler, sonra makro görev.
console.log('1 sync');
setTimeout(() => console.log('5 timeout'), 0);
Promise.resolve().then(() => console.log('3 promise'));
Promise.resolve().then(() => console.log('4 promise'));
console.log('2 sync');Mikro Görev Açlığının Riski
Mikro görevler her zaman makro görevlerden önce çalıştığından, sürekli olarak yeni mikro görevler zamanlayan bir mikro görev, zamanlayıcıları ve görüntülemeyi engelleyebilir. Mikro görev zincirlerini sonlu tutun.
let n = 0;
function loop() {
if (n++ < 3) {
console.log('micro ' + n);
Promise.resolve().then(loop);
}
}
setTimeout(() => console.log('macro after micros'), 0);
loop();Bu Sıralama Neden Önemlidir?
Mikro görevlerin makro görevlerden önce çalıştığını bilmek, vaat sonuçlarının neden zamanlayıcı geri çağırmalarından önce göründüğünü ve sıralama hatalarının neden oluştuğunu açıklar. Kural basittir: eşzamanlı işlemler, ardından tüm mikro görevleri tüketme, sonra bir makro görev; bu sıra tekrarlanır.
console.log('A');
Promise.resolve().then(() => console.log('B'));
setTimeout(() => console.log('D'), 0);
console.log('C');Kısa Kontrol
Bir vaat .then'i ile setTimeout(fn, 0) beklemede. Hangisi önce çalışır?
Özet: Mikro Görevler ve Vaatler
Öncelik kuralını öğrendiniz:
- Mikro görevler vaatlerden ve
queueMicrotask'tan gelir. - Mikro görev kuyruğunun tamamı herhangi bir makro görevden önce tüketilir.
- Eşzamansız/bekleme devam işlemleri mikro görevlerdir.
- Sonsuz mikro görev zincirleri zamanlayıcıları ve görüntülemeyi engelleyebilir.
Sıkça Sorulan Sorular
“Mikro Görevlar ve Promise'ler” dersi ücretsiz mi?
Evet — “Mikro Görevlar ve Promise'ler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 4 dersten oluşur.
“Mikro Görevlar ve Promise'ler” dersinde ne öğreneceğim?
Promise geri çağrılarının neden önce çalıştığını öğrenin. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Mikro Görevlar ve Promise'ler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Çağrı Yığını
- Makro Görevler ve Görev Kuyruğu
- Mikro Görevlar ve Promise'ler
- queueMicrotask ve Sıralama