শুধু টাইমার সংখ্যা গণনা করার পরিবর্তে, এখানে এমন একটি বাস্তবায়ন রয়েছে যা সমস্ত টাইমরিডকে অ্যারেতে রাখে। এটি কেবল সক্রিয় টাইমার দেখায় যখন গৃহীত উত্তরগুলি কেবলমাত্র setTimeout
& এর কাছে কল গণনা করে clearTimeout
।
(function(w) {
var oldST = w.setTimeout;
var oldSI = w.setInterval;
var oldCI = w.clearInterval;
var timers = [];
w.timers = timers;
w.setTimeout = function(fn, delay) {
var id = oldST(function() {
fn && fn();
removeTimer(id);
}, delay);
timers.push(id);
return id;
};
w.setInterval = function(fn, delay) {
var id = oldSI(fn, delay);
timers.push(id);
return id;
};
w.clearInterval = function(id) {
oldCI(id);
removeTimer(id);
};
w.clearTimeout = w.clearInterval;
function removeTimer(id) {
var index = timers.indexOf(id);
if (index >= 0)
timers.splice(index, 1);
}
}(window));
এভাবে আপনি পৃষ্ঠায় সক্রিয় টাইমারগুলির গণনা পেতে পারেন :
timers.length;
এভাবে আপনি সমস্ত সক্রিয় টাইমারগুলি মুছে ফেলতে পারেন :
for(var i = timers.length; i--;)
clearInterval(timers[i]);
জ্ঞাত সীমাবদ্ধতা:
- আপনি
setTimeout
এই বানর প্যাচটি দিয়ে কেবল কোনও ফাংশন (কোনও স্ট্রিং নয়) পাস করতে পারেন ।
- ফাংশনটি ধরে নেয়
clearInterval
এবং clearTimeout
একই কাজ করে যা তারা করে তবে ভবিষ্যতে এটি পরিবর্তন হতে পারে।
activeTimers
যখন ডাকা হয়নি তখনclearTimeout
আমার হ্রাস হওয়া দরকার । এটির দ্বিতীয় লাইনের পরিবর্তে এটি সহজেই সম্পন্ন হয়েছে :window.setTimeout
return window.originalSetTimeout(function() {func(); activeTimers--;},delay);