Ngôn ngữ Node.js cho phép người dùng tạo và xử lý các event (sự kiện) tùy chỉnh dễ dàng bằng cách sử dụng các module event. Module Event bao gồm lớp EventEmitter, được sử dụng để xử lý các event tùy chỉnh. Để tìm hiểu rõ hơn EventEmitter trong Node.js là gì? Bạn đọc cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn.
Trong các bài viết Học Node.js trước Taimienphi.vn đã giới thiệu cho bạn về Event trong Node.js là gì. Bài viết dưới đây Taimienphi.vn sẽ giới thiệu tiếp cho bạn về EventEmitter trong Node.js.
![eventemitter trong node js la gi](https://thuthuat.taimienphi.vn/cf/Images/li/2018/12/3/eventemitter-trong-node-js-la-gi.jpg)
Tìm hiểu khái niệm EventEmitter trong Node.js
EventEmitter trong Node.js là gì?
Nhiều đối tượng trong Node sẽ phát sinh ra sự kiện, chẳng hạn như net.Server phát sinh sự kiện mỗi khi có kết nối ngang hàng với nó, hay fs.readStream phát sinh sự kiện khi một file được mở. Tất cả đối tượng phát sinh sự kiện này là biến thể của sự kiện EventEmitter.
Như Taimienphi.vn đã đề cập ở trên, lớp EventEmitter nằm trong module event. Để truy cập lớp EventEmitter, bạn sử dụng đoạn mã dưới đây:
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Khi một biến thể EventEmitter gặp phải lỗi bất kỳ, nó sẽ tạo ra một event "error". Khi một Listener mới được thêm, event newListener sẽ được kích hoạt và khi Listener bị xóa bỏ, event removeListener sẽ được kích hoạt.
EventEmitter cung cấp nhiều thuộc tính khác nhau như on và emit. Trong đó thuộc tính on được sử dụng để liên kết với hàm event và thuộc tính emit được sử dụng để kích hoạt sự kiện.
Ví dụ về xử lý các sự kiện trong Node.js
Dưới đây là ví dụ về xử lý các sự kiện trong Node.js:
![eventemitter trong node js la gi 2](https://taimienphi.vn/tmp/cf/aut/eventemitter-trong-node-js-la-gi-1.jpg)
Trong ví dụ trên, bước đầu tiên là import module events, sau đó tạo đối tượng của lớp EventEmitter. Bước tiếp theo là xác định hàm event handler bằng cách sử dụng hàm on(). Phương thức on() yêu cầu tên sự kiện để xử lý và hàm callback được gọi khi một sự kiện được tăng lên.
Hàm emit() sẽ tăng sự kiện được chỉ định. Tham số đầu tiên là tên của sự kiện dưới dạng chuỗi và tiếp theo là đối số.
Một sự kiện có thể được phát sinh ngay cả khi đối số bằng 0 hoặc các giá trị khác. Bạn có thể chỉ định tên bất kỳ cho sự kiện tùy chỉnh trong hàm emit ().
Ngoài ra bạn cũng có thể sử dụng phương thức addListener() để đăng ký một sự kiện như hình dưới đây:
Ví dụ về EventEmitter trong Node.js
![eventemitter trong node js la gi 3](https://i1.taimienphi.vn/Images/thumb.gif)
Phương thức của EventEmitter trong Node.js
Dưới đây là bảng danh sách các phương thức quan trọng của lớp EventEmitter trong Node.js:
![eventemitter trong node js la gi 4](https://i1.taimienphi.vn/Images/thumb.gif)
Pattern EventEmitter phổ biến
2 pattern phổ biến được sử dụng để nâng cao và liên kết các sự kiện bằng cách sử dụng lớp EventEmitter trong Node.js:
1. Trả về EventEmitter từ một hàm.
2. Mở rộng lớp EventEmitter.
Trả về EventEmitter từ một hàm
Trong mẫu pattern này, hàm constructor trả về đối tượng EventEmitter, được sử dụng để phát sinh các sự kiện bên trong một hàm. Đối tượng EventEmitter này có thể được sử dụng để đăng ký cho các sự kiện.
Để dễ hình dung hơn, bạn tham khảo ví dụ dưới đây:
![eventemitter trong node js la gi](https://i1.taimienphi.vn/Images/thumb.gif)
Đầu ra:
![eventemitter trong node js la gi](https://i1.taimienphi.vn/Images/thumb.gif)
Trong hàm LoopProcessor(), trước hết chúng ta sẽ tạo một đối tượng của lớp EventEmitter, sau đó sử dụng nó để phát sinh các sự kiện BeforeProcess và AfterProcess. Cuối cùng, trả về một đối tượng EventEmitter từ hàm.
Bây giờ chúng ta có thể sử dụng giá trị trả về của hàm LoopProcessor để ràng buộc các sự kiện này bằng cách sử dụng hàm on () hoặc addListener ().
Mở rộng lớp EventEmitter
Trong pattern này, chúng ta có thể mở rộng hàm constructor từ lớp EventEmitter để phát sinh các sự kiện.
Dưới đây là ví dụ về mở rộng lớp EventEmitter:
![eventemitter trong node js la gi](https://i1.taimienphi.vn/Images/thumb.gif)
Đầu ra:
![eventemitter trong node js la gi](https://i1.taimienphi.vn/Images/thumb.gif)
Trong ví dụ trên mở rộng hàm LoopProcessor constructor với lớp EventEmitter sử dụng phương thức util.inherits() của module utility. Vì vậy chúng ta có thể sử dụng các phương thức EventEmitter với đối tượng LoopProcessor để xử lý các sự kiện riêng của nó.
Bằng cách này, bạn có thể sử dụng lớp EventEmitter để tăng và xử lý các sự kiện tùy chỉnh trong Node.js.
https://thuthuat.taimienphi.vn/eventemitter-trong-node-js-la-gi-41300n.aspx
Bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn về EventEmitter trong Node.js là gì? Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết khác đã có trên Taimienphi.vn để tìm hiểu cách cài đặt cũng như cách tạo ứng dụng Node.js như thế nào nhé.