30 روز با Node - روز بیستم: آشنایی با ماژول تایمر (Timer) در نود جی اس

03 شهریور 1397
nodejs-timer-module

تایمرها

ماژولهای Timer در نود جی اس، برای انجام اعمالی که قرار است بعد از گذشت مدت زمان خاصی انجام شوند، یک API سراسری در اختیارمان گذاشته است. تایمر نود جی اس، ساختاری است برای فراخوانی های اعمال مشخص بعد از مدت زمان معین. همچنین زمان فراخوانی تابع، به اینکه کدام عمل تایمر با آن مشارکت دارد و نیز اینکه چه کاری از حلقه رخداد نود جی اس درحال انجام است، بستگی خواهد داشت.

ضمنا نیازی نیست که ذکر کنیم از متد تایمر استفاده می کنیم، چرا که همه اپلیکیشن ها به آن دسترسی سراسری دارند.

متدهای روشن کردن یا راه اندازی تایمرها (Set Timer)

این متدها برای زمان بندی اجرای یک کد بعد از تنظیم تایمری که از قبل تعیین شده، به کار می رود.

متد setImmediate (callback, args*): این متد یک تابع [کال بک] را بلافاصله بعد از اینکه چرخه فعلی حلقه رخدادها تمام شد، اجرا می کند. این متد بعد از هر عملیات I/O که در چرخه فعلی حلقه رخدادها است اجرا می شود اما قبل از زمان بندی شدن برای چرخه بعدی حلقه رخدادها. اولین آرگومان این متد تابعی است که قرار است اجرا شود.

اولین آرگومانی که به setImmediate ارسال خواهد شد، تابعی خواهد بود که قرار است اجرا شود. به مثال زیر دقت کنید:

توجه: علامت ** نشان دهنده آرگومان اختیاری است.

function hello () {  
  console.log("This will run Immediately");  
}  
console.log("It will Print the data Immediately")
setImmediate(hello);

کد بالا را اجرا کنید:

>node "setImmediate().js"
It will Print the data Immediately
This will run Immediately

2. متد setInterval(callback, delay, args**): اگر یک قطعه کد داشته باشیم که بخواهیم چندین بار اجرا کنیم از setInterval() برای اجرای آن استفاده می کنیم. این متد بعنوان اولین آرگومان یک کال بک می گیرد که به تعداد بینهایت بار با تاخیر به اندازه delay میلی ثانیه (آرگومان دوم) اجرا خواهد شد. آرگومانهای اختیاری دیگری بسته به نوع کال بک و پارامترهای آن نیز قابل ارسال است. ولی به یاد داشته باشید که بسته به وضعیت و عملیاتی که ممکن است در حلقه رخدادها وجود داشته باشد، مقدار delay را بصورت تقریبی بیان کنید. به مثال زیر دقت کنید:

توجه: علامت ** به معنای آرگومان اختیاری است.

function hello () {  
  console.log("This will run recursively");  
}  
console.log("It will Print the data recursively after a delay of 2000ms again and again")
setInterval(hello,2000);

و اجرای آن:

>node "setInterval().js"
It will Print the data recursively after a delay of 2000ms again and again
This will run recursively
This will run recursively
This will run recursively
This will run recursively
This will run recursively
This will run recursively
This will run recursively

3. متد setTimeoiut(callback, delay, args**) : این متد می تواند برای اجرای یک کال بک بعد از یک تاخیر مشخص به کار رود. اولین آرگومان این متد، یک کال بک است و مقدار تاخیر نیز به عنوان آرگومان دوم مشخص می شود. آرگومان های بعدی اختیاری است و در صورت نیاز قابل استفاده است. به مثال زیر دقت کنید:

توجه: علامت ** به معنای آرگومان اختیاری است.

function hello () {  
  console.log("This will run only once");  
}  
console.log("It will Print the data once after the delay of 2000ms")
setTimeout(hello,2000); 

و اجرای آن:

>node "setTimeout().js"
It will Print the data once after the delay of 2000ms
This will run only once

متدهای خاموش کردن یا از کار انداختن تایمر (Clear Timer)

1. متد clearImmediate(immediate) : به کمک این تابع می توانید شیء ایجاد شده با setImmediate() را پاک کنید.

function hello () {  
  console.log("This will not run at all");  
}  
console.log("It is supposed to print the data immediately")
var imm = setImmediate(hello);
clearImmediate(imm);

و اجرای آن :

>node "clearImmediate().js"
It is supposed to print the data immediately

2. متد clearInterval (timeout) : این متد هم برای پاک کردن شیءای که با setInterval() ایجاد شده، به کار می رود.

function hello () {  
  console.log("This will Not Run at all");  
}  
console.log("It is supposed Print the data recursively after a delay of 2000ms again and again")
var s_int = setInterval(hello,2000); 
clearInterval(s_int);

و اجرای آن:

>node "clearInterval().js"
It is supposed Print the data recursively after a delay of 2000ms again and again

3. متد clearTimeout(timeout) : این متد نیز برای پاک کردن شیءای که توسط setTimeout() ایجاد شده به کار می رود. به کد زیر دقت کنید:

function hello () {  
  console.log("This will not run at all");  
}  
console.log("It is supposed to Print the data once after the delay of 2000ms")
var tim = setTimeout(hello,2000);  
clearTimeout(tim);

که نتیجه اجرای آن هم به صورت زیر است:

>node "clearImmediate().js"
It is supposed to Print the data once after the delay of 2000ms

خلاصه

در درس امروز از سلسله دروس 30 روز با نود جی اس، در مورد تایمرها در نود جی اس یادگرفتیم. همچنین درمورد روشن کردن و خاموش کردن آنها مثالهایی دیدیم.

نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر
08 دی 1397
آموزش تا روز 20 است بقیه آموزش ها رو از کجا باید دنبال کنم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
08 دی 1397
به زودی بقیه آموزش ها قرار داده می شوند. در حال بازنگری هستیم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

علی
10 آبان 1397
با سلام. چرا ادامه نمیدید؟؟ اگه میشه یه مقدار پروژه ای برید جلو آموزش ری اکت هم در کار هست ؟؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
10 آبان 1397
سلام وقت شما بخیر به زودی آموزش های بعدی قرار می گیرند.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.