Ví dụ về xử lý Timers trong Nodejs

Ví dụ về xử lý Timers trong Nodejs là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Ví dụ về xử lý Timers trong Nodejs sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về hàm Timers trong NodeJS, cách sử dụng timer và các ví dụ cụ thể. Trong các bài trước về Global Obejct mình có đề cập qua về các hàm có trong modue Timer của NodeJS nhưng chưa giải thích đầy đủ, vì vậy bài này mình sẽ nói chi tiết hơn.

1. Module timers trong NodeJS

Module timers là một global object dùng để đặt thời điểm các hàm được gọi ở một vài khoảng thời gian. Bởi các hàm timer là những global obejct nên không cần phải khai báo require('timers') trong khi cần sử dụng các API của nó.

Các hàm timers khá là cần thiết trong quá trình lập trình, sử dụng nó trong NoedJS cũng giống như sử dụng với các ngôn ngữ khác như C, Python, Java,..nó giúp đặt thời gian các hàm có thể chạy một cách lặp lại.

Timers phân chia thành 2 loại function chính:

Set Timer function

  • setImmediate() : chạy ngay lập tức (như cái tên của nó) =))
  • setTimeout() : chạy trong một khoảng thời gian.
  • setInterval(): lặp đi lặp lại trong khoảng thời gian

Clear timer functions

  • clearImmediate() : dừng một setImmediate objects, tạo bởi hàm setImmediate()
  • clearTimeout() : dừng một setTimeout objects, tạo bởi hàm setTimeout()
  • clearInterval() : dừng một setInterval objects, tạo bởi hàm setInterval()

2. Tìm hiểu về các hàm Timers

Phần này mình sẽ liệt kê ra các hàm timers hay dùng để các bạn có thể hiểu rõ hơn nhé. Các hàm timer trong NodeJS cũng giống như các API về timers cung cấp bởi trình duyệt ,nhưng các hàm timers trong NodeJS được xây dưng dựa trên NodeJS event loops (vòng lặp sự kiện).

Lưu ý rằng hàm timers này được trình biên dịch định nghĩa chứ không có sẵn trong ngôn ngữ javascript nha các bạn !

Timer setInterval()

Hàm này có nhiệm vụ lặp lại sau một khoảng thời gian đặt trước. Để sử dụng ta có pháp:

  setInterval(callback, delay[, ...args]) 

có 3 tham số mà chúng ta có thể thêm vào:

  • callback: <function> hàm này sẽ được gọi khi khoảng thời gian delay xảy ra.
  • delay : <number> thời gian lặp lại của hàm callback được tính bằng mili giây
  • [...args] : bất cứ gì bạn muốn truyền vào hàm callback

Nếu thời gian delay lớn hơn 2147483647 hoặc nhỏ hơn 1 thì sẽ tự động set về 1. Các số không phải số nguyên sẽ tự động được chuyển sang số nguyên. Trong trường hợp tham số callback không phải là một hàm thì sẽ trả lại thông báo lỗi.

Chúng ta xem qua ví dụ bên dưới:

let a = setInterval(function () {
    console.log('repeat !!!')
    //in ra các tham số truyền vào của hàm callback
    console.log(arguments)
}, 1000, 'hoidapcode', 'học lập trình nodejs')
//Hàm setInterval sẽ trả lại một obejct
console.log(typeof a) 

Trong đoạn code bên trên mình cho hàm callback chạy mỗi 1 giây mà truyền vào đó các agruments. Trong hàm callback sẽ log ra chuỗi reapeat !! và các tham số được truyền vào. Cho bạn nào chưa biết thì object agruments là object có sẵn trong các hàm chứa các tham số được truyền vào hàm đó.

Timer setTimeout()

Khi hàm setTimeout được kích hoạt thì callback function sẽ chạy sau một khoảng thời gian đặt trước. Ta có cú pháp như sau :

  setTimeout(callback, wait[, ...args]) 

có 3 tham số mà chúng ta có thể thêm vào:

  • callback: <function> hàm này sẽ được gọi khi khoảng thời gian wait xảy ra.
  • wait: <number> thời gian chờ của hàm callback được tính bằng mili giây
  • [...args] : bất cứ gì bạn muốn truyền vào hàm callback

Nếu thời gian delay lớn hơn 2147483647 hoặc nhỏ hơn 1 thì sẽ tự động set về 1. Các số không phải số nguyên sẽ tự động được chuyển sang số nguyên. Trong trường hợp tham số callback không phải là một hàm thì sẽ trả lại thông báo lỗi.

Lấy ví dụ nhỏ để các bạn hiểu rõ hơn nha :

  setTimeout(function (){      console.log('run !')  }, 2000) 

Trong ví dụ này hàm callback sẽ chỉ được chạy sau 2 giây. Nó khá là đơn giản nên bạn xem hình bên dưới sẽ hiểu hơn nhé !

Ví dụ về xử lý Timers trong Nodejs


Timer setImmediate

Như cái tên nó hàm này sẽ chạy ngay lập tức. Ta có cú pháp như sau :

  setImmediate(callback, [, ...args]) 

có 3 tham số mà chúng ta có thể thêm vào:

  • callback: <function> hàm này sẽ được gọi ngay lập tức
  • [...args] : bất cứ gì bạn muốn truyền vào hàm callback

Chúng ta có ví dụ bên dưới:

setImmediate(function() {
    console.log('1')
})
 
setImmediate(function() {
    console.log('2')
    setImmediate(function() {
        console.log('3')
    })
})  

Khi nhiều lệnh gọi đến setImmediate() được thực hiện, các hàm gọi lại được xếp hàng để thực hiện theo thứ tự mà chúng được tạo. Toàn bộ hàng đợi gọi lại được xử lý mỗi lần lặp vòng lặp sự kiện (event loop). Nếu setImmediate() được gọi từ bên trong một callback function, nó đó sẽ không được kích hoạt cho đến khi có event loop tiếp theo. Khi chạy chương trình trên sẽ có kết quả:

1  
2  
3 

Trên đây là những kiến thức cơ bản về Timers trong Nodejs, nó cũng là phần bạn cần phải biết . Mong bài viết này có thể giúp ích cho bạn cho việc lập trình với Nodejs, cảm ơn bạn đã quan tâm bài viết này.

Hy vọng với bài viết về Ví dụ về xử lý Timers trong Nodejs đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!