कोड लिखना बेहतर होता है जो तत्काल कॉलबैक (जैसे कि माइक्रोट्स्क बनाम मैक्रोटस्क) के समय पर निर्भर नहीं करता है, लेकिन चलो उस समय के लिए अलग रख दें।
setTimeoutएक मैक्रोटस्क को कतारबद्ध करता है, जो कि कम से कम, सभी माइक्रोटेस्क (और माइक्रोटेस्क कि वे स्पॉन को पूरा करते हैं) तक शुरू होने का इंतजार करते हैं। यहाँ एक उदाहरण है:
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एक संकल्प लिया वादा पर तत्काल के व्यवहार से मौलिक रूप से अलग है setTimeoutकॉलबैक - वादा .thenपहले चलेंगे, भले ही setTimeoutपहले कतारबद्ध किया गया था। लेकिन केवल आधुनिक ब्राउज़र वादा का समर्थन करते हैं। यदि मौजूद नहीं है तो माइक्रोटस्क की विशेष कार्यक्षमता को ठीक से कैसे पॉलीफ़िल किया जा सकता Promiseहै?
यदि आप .thenका उपयोग करके एक microtask की नकल करने की कोशिश करते हैं setTimeout, तो आप एक macrotask कतारबद्ध करेंगे, न कि एक microtask, इसलिए बुरी तरह से .thenपॉलीफ़िल्ड सही समय पर नहीं चलेगा अगर एक macrotask पहले से ही पंक्तिबद्ध है।
वहाँ एक समाधान का उपयोग कर रहा है MutationObserver, लेकिन यह बदसूरत लग रहा है, और क्या MutationObserverहै के लिए नहीं है। इसके अलावा, MutationObserverIE10 और इससे पहले समर्थित नहीं है। यदि कोई ऐसे वातावरण में माइक्रोटस्क को कतारबद्ध करना चाहता है जो मूल रूप से वादों का समर्थन नहीं करता है, तो क्या कोई बेहतर विकल्प हैं?
(मैं वास्तव में IE10 का समर्थन करने की कोशिश नहीं कर रहा हूं - यह सिर्फ एक सैद्धांतिक अभ्यास है कि कैसे वादे के बिना माइक्रोटेक को कतार में रखा जा सकता है)
schedule.jsपर एक नज़र डालते हुए ज्ञानवर्धक होगा।