setInterval() অনন্তকাল চলে। এটি নির্দিষ্ট সময় পর বা নির্দিষ্ট সংখ্যক এক্সিকিউশন পর বন্ধ করতে শর্তসাপেক্ষ clearInterval() ব্যবহার করতে হয়।
উদাহরণ: ৩০ সেকেন্ড পর বন্ধ হবে
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>setInterval Stop Demo</title>
</head>
<body>
<script>
var now = new Date().getTime();
var interval = setInterval(function () {
// ৩০ সেকেন্ড (30000 মিলিসেকেন্ড) পর বন্ধ
if (new Date().getTime() - now > 30000) {
clearInterval(interval);
return;
}
console.log("working");
}, 2000); // প্রতি ২ সেকেন্ডে একবার
</script>
</body>
</html>
চলানো পদ্ধতি
ফাইলটি index.html নামে সেভ করুন এবং VS Code-এ "Open with Live Server" দিয়ে রান করুন।
আউটপুট
কনসোলে প্রতি ২ সেকেন্ডে "working" প্রিন্ট হবে ৩০ সেকেন্ড ধরে (মোট ~১৫ বার), তারপর বন্ধ হয়ে যাবে।
ব্যাখ্যা
now- শুরুয়ের টাইমস্ট্যাম্প সংরক্ষণ।setInterval- প্রতি ২০০০ মিলিসেকেন্ড (২ সেকেন্ড) ইন্টারভালে ফাংশন রান করে।- প্রতিবার চেক করা হয়: বর্তমান টাইম - শুরুয়ের টাইম > ৩০০০০ কিনা।
- সত্য হলে
clearInterval(interval)দিয়ে ইন্টারভাল বন্ধ করা হয়।
বিকল্প: নির্দিষ্ট সংখ্যক এক্সিকিউশন পর বন্ধ
let count = 0;
const maxRuns = 10;
const interval = setInterval(() => {
console.log("Run:", ++count);
if (count >= maxRuns) {
clearInterval(interval);
console.log("Stopped after", maxRuns, "runs");
}
}, 1000);
আধুনিক প্যাটার্ন: Promise + async/await
function runInterval(callback, intervalMs, maxRunsOrTime) {
return new Promise(resolve => {
let count = 0;
const start = Date.now();
const timer = setInterval(() => {
callback();
count++;
const shouldStop = typeof maxRunsOrTime === 'number'
? count >= maxRunsOrTime
: Date.now() - start >= maxRunsOrTime;
if (shouldStop) {
clearInterval(timer);
resolve(count);
}
}, intervalMs);
});
}
// ব্যবহার
await runInterval(() => console.log('tick'), 2000, 30000); // ৩০ সেকেন্ড
// বা
await runInterval(() => console.log('tick'), 2000, 10); // ১০ বার