Bnlang এ টাইমার

বিল্ট-ইন timers মডিউল ইভেন্ট লুপ থেকে কলব্যাক শিডিউল করে — একটি ডিলে (মিলিসেকেন্ডে) পরে, অথবা ইন্টারভ্যালে বারবার। শেখার জন্য মাত্র দু'টা ফাংশন: timers.set এবং timers.interval


timers.set — Fire Once After a Delay

timers.set(delay_ms, fn) fn কে একবার চালানোর জন্য শিডিউল করে, এখন থেকে delay_ms মিলিসেকেন্ড পরে। 0 পাঠালে কারেন্ট সিঙ্ক্রোনাস কোড শেষ হওয়ার পরে কল ডিফার হয় — কাজ ভাগ করার জন্য উপযোগী।

import "timers" as timers;

print("a");
timers.set(0,    function () { print("c — next tick"); });
timers.set(1000, function () { print("d — one second later"); });
print("b");

// Output:
// a
// b
// c — next tick
// d — one second later

timers.interval — Fire Repeatedly

timers.interval(delay_ms, fn) একটি ক্যান্সেল ফাংশন ফেরত দেয়। ইন্টারভ্যাল থামাতে সেটিকে কল করুন।

import "timers" as timers;

var count  = 0;
var cancel = null;

function step() {
    count = count + 1;
    print("tick", count);
    if (count >= 3) {
        cancel();
        print("cancelled");
    }
}

cancel = timers.interval(1000, step);
print("scheduled");

What About setImmediate / process.nextTick?

Bnlang setImmediate বা process.nextTick দেয় না। দু'টা ক্ষেত্রেই timers.set(0, fn) ব্যবহার করুন — কারেন্ট টিক শেষ হওয়ার পরে কলব্যাক ফায়ার হয়, রেজিস্ট্রেশন অর্ডারে।


Best Practices

  • টাইমার কলব্যাক ছোট রাখুন — এরা প্রতিটা অন্য ইন-ফ্লাইট রিকোয়েস্টের সাথে ইভেন্ট লুপ শেয়ার করে।
  • interval যে ক্যান্সেল হ্যান্ডেল ফেরত দেয়, সেটি সবসময় ধরে রাখুন যাতে থামাতে পারেন; না থামালে এটি আপনার প্রোগ্রামকে চিরকাল জীবিত রাখবে।
  • ইভেন্ট-ড্রিভেন ডিজাইন কাজ করলে টাইট interval(1, ...) দিয়ে পোল করবেন না — উচ্চ-ফ্রিকোয়েন্সি ইন্টারভ্যাল CPU পোড়ায়।