Anında geri aramaların zamanlamasına dayanmayan kod yazmak daha iyidir (mikro görevler ve makro görevler gibi), ama bunu bir kenara bırakalım.
setTimeout
en azından tüm mikro görevler (ve ürettikleri mikro görevler) bitene kadar başlamayı bekleyen bir makro görevi sıralar. İşte bir örnek:
console.log('Macrotask queued');
setTimeout(function() {
console.log('Macrotask running');
});
Promise.resolve()
.then(function() {
console.log('Microtask running');
});
console.log('Microtask queued');
console.log('Last line of script');
.then
Çözülmüş bir Sözün üzerindeki davranışı temel olarak bir setTimeout
geri çağrının davranışından temel olarak farklıdır - .then
İlk önce setTimeout
sıraya alınmış olsa bile Söz önce çalışır. Ancak Promises sadece modern tarayıcıları desteklemektedir. Bir mikro görevin özel işlevselliği yoksa düzgün şekilde nasıl doldurulabilir Promise
?
.then
Kullanarak bir mikro görevini taklit etmeye çalışırsanız setTimeout
, bir mikro görev yerine bir makro görev sıraya koyacaksınız, bu nedenle .then
bir makro görev zaten kuyruğa alınmışsa, kötü doldurulmuş içerik doğru zamanda çalışmaz.
Kullanan bir çözüm var MutationObserver
, ama çirkin görünüyor ve MutationObserver
bunun için bir şey yok . Ayrıca, MutationObserver
IE10 ve önceki sürümlerde desteklenmez. Vaatleri doğal olarak Promises'ı desteklemeyen bir ortamda bir mikro görev sıralamak istiyorsa, daha iyi alternatifler var mı?
( Aslında IE10'u desteklemeye çalışmıyorum - bu sadece mikro görevlerin Vaatler olmadan nasıl sıraya alınabileceğine dair teorik bir egzersizdir)
schedule.js
bir göz atmak aydınlatıcı olacaktır.