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.
setTimeouten 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 setTimeoutgeri çağrının davranışından temel olarak farklıdır - .thenİlk önce setTimeoutsı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?
.thenKullanarak 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 .thenbir 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 MutationObserverbunun için bir şey yok . Ayrıca, MutationObserverIE10 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.jsbir göz atmak aydınlatıcı olacaktır.