এমন কোড লিখিত ভাল যা তাত্ক্ষণিক কলব্যাকের সময় (মাইক্রোটাস্ক বনাম ম্যাক্রোটাস্কের মতো) এর উপর নির্ভর করে না, তবে এই মুহুর্তের জন্য আলাদা করে দেওয়া যাক।
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
প্রথম সারিতে রয়েছে যায়নি। তবে শুধুমাত্র আধুনিক ব্রাউজারগুলি প্রতিশ্রুতিগুলি সমর্থন করে। কিভাবে করতে বিশেষ একটি microtask কার্যকারিতা সঠিকভাবে যদি polyfilled করা Promise
বিদ্যমান নেই?
আপনি যদি কোনও .then
মাইক্রোটাস্ক ব্যবহার করে অনুকরণ করার চেষ্টা করেন setTimeout
, আপনি মাইক্রোটাস্ক নয়, ম্যাক্রোটাস্কের সন্ধান করছেন, সুতরাং .then
ম্যাক্রোটাস্ক ইতিমধ্যে সারি করা থাকলে খারাপভাবে পলফিল্ড সঠিক সময়ে চলবে না।
ব্যবহার করে একটি সমাধান রয়েছে MutationObserver
, তবে এটি দেখতে কুৎসিত দেখাচ্ছে, এবং এটির জন্য নয় MutationObserver
। এছাড়াও, MutationObserver
আইই 10 এবং এর আগে সমর্থিত নয়। যদি কেউ এমন পরিবেশে মাইক্রোটাস্কের সারি তৈরি করতে চান যা স্থানীয়ভাবে প্রতিশ্রুতিগুলিকে সমর্থন করে না, তবে এর চেয়ে আরও ভাল বিকল্প কি আছে?
(আমি আসলে IE10 কে সমর্থন করার চেষ্টা করছি না - মাইক্রোটাস্কগুলি কীভাবে প্রতিশ্রুতি ব্যতীত সারিবদ্ধ করা যায় সে সম্পর্কে এটি কেবল একটি তাত্ত্বিক অনুশীলন)
schedule.js
করা আলোকিত হবে।