Bài 12: Sự kiện trong Node.js: Hướng dẫn sử dụng EventEmitter
Với Node.js, một trong những tính năng được sử dụng nhiều nhất là sự kiện (Event). Sự kiện cho phép các chương trình Node.js theo dõi và xử lý các hoạt động xảy ra trong hệ thống. Trong bài viết này, chúng ta sẽ tìm hiểu về cách sử dụng sự kiện trong Node.js.
Sự kiện là gì?
Sự kiện là một cơ chế cho phép Node.js theo dõi các hoạt động xảy ra trong hệ thống như kết nối đến cơ sở dữ liệu hoặc yêu cầu HTTP được gửi đến máy chủ. Mỗi sự kiện có một tên và một tập hợp các tham số liên quan đến sự kiện đó. Khi một sự kiện xảy ra, Node.js sẽ kích hoạt một hàm được đăng ký trước đó để xử lý sự kiện đó.
EventEmitter
Để tạo và quản lý sự kiện trong Node.js, chúng ta sử dụng đối tượng EventEmitter. EventEmitter là một lớp được định nghĩa trong module events của Node.js.
Để sử dụng EventEmitter, chúng ta cần tạo một đối tượng EventEmitter mới bằng cách sử dụng từ khóa new như sau:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
Sau khi tạo đối tượng EventEmitter, chúng ta có thể đăng ký các hàm xử lý sự kiện cho đối tượng đó bằng phương thức on():
myEmitter.on('event', function() {
console.log('An event occurred!');
});
Trong ví dụ trên, chúng ta đã đăng ký một hàm xử lý sự kiện cho sự kiện có tên là “event”. Khi sự kiện này xảy ra, hàm xử lý sự kiện sẽ được gọi và in ra thông báo “An event occurred!”.
Chúng ta cũng có thể đăng ký nhiều hàm xử lý cho cùng một sự kiện bằng cách gọi phương thức on() nhiều lần:
myEmitter.on('event', function() {
console.log('First event handler!');
});
myEmitter.on('event', function() {
console.log('Second event handler!');
});
Với ví dụ trên, khi sự kiện “event” xảy ra, cả hai hàm xử lý sự kiện đều sẽ được gọi.
Phát sự kiện
Để phát ra một sự kiện, chúng ta sử dụng phương thức emit() của đối tượng EventEmitter:
myEmitter.emit('event');
Sau khi gọi phương thức emit(), Node.js sẽ phát ra sự kiện có tên “event”. Tất cả các hàm xử lý sự kiện đã được đăng ký cho sự kiện này sẽ được gọi.
Chúng ta cũng có thể truyền các tham số cho sự kiện khi phát ra sự kiện bằng cách truyền các đối số vào phương thức emit():
myEmitter.emit('eventWithArgs', arg1, arg2, arg3);
Trong ví dụ trên, chúng ta đã phát ra sự kiện có tên “eventWithArgs” và truyền ba tham số arg1, arg2 và arg3 cho sự kiện đó.
Xóa các hàm xử lý sự kiện
Để xóa một hàm xử lý sự kiện đã được đăng ký cho một sự kiện, chúng ta sử dụng phương thức off() hoặc removeListener():
myEmitter.off('event', eventHandler);
myEmitter.removeListener('event', eventHandler);
Trong ví dụ trên, chúng ta đã xóa hàm xử lý sự kiện eventHandler khỏi danh sách các hàm xử lý sự kiện được đăng ký cho sự kiện “event”.
Kết luận
Sự kiện là một tính năng quan trọng của Node.js cho phép các chương trình Node.js theo dõi và xử lý các hoạt động xảy ra trong hệ thống. Chúng ta có thể sử dụng đối tượng EventEmitter để tạo và quản lý các sự kiện trong Node.js. Việc sử dụng EventEmitter cho phép chúng ta đăng ký các hàm xử lý sự kiện cho các sự kiện, phát ra các sự kiện và xóa các hàm xử lý sự kiện đã được đăng ký trước đó.