Nhiều đối tượng trong Node phát ra sự kiện, ví dụ: net.Server phát ra sự kiện mỗi khi một máy ngang hàng kết nối với nó, fs.readStream phát ra sự kiện khi tệp được mở. Tất cả các đối tượng phát ra sự kiện đều là thể hiện của events.EventEmitter.
Sự kiệnLớp Emitter
Như chúng ta đã thấy trong phần trước, lớp EventEmitter nằm trong module sự kiện. Nó có thể truy cập thông qua đoạn mã sau:
// Import events module var events = require('events'); // Create an eventEmitter object var eventEmitter = new events.EventEmitter();
Khi một phiên bản EventEmitter gặp bất kỳ lỗi nào, nó sẽ phát ra một sự kiện ‘lỗi’. Khi một listener mới được thêm vào, sự kiện ‘newListener’ sẽ được kích hoạt và khi một listener bị xóa, sự kiện ‘removeListener’ sẽ được kích hoạt.
EventEmitter cung cấp nhiều thuộc tính như bật và phát ra . thuộc tính on được sử dụng để liên kết một chức năng với sự kiện và phát ra được sử dụng để kích hoạt một sự kiện.
Method – Function
STT. | Phương pháp & Mô tả |
---|---|
1 | addListener(event, listener)
Thêm một listener vào cuối mảng cho sự kiện đã chỉ định. Không có kiểm tra nào được thực hiện để xem listener đã được thêm chưa. Nhiều cuộc gọi chuyển qua cùng một tổ hợp sự kiện và trình nghe sẽ dẫn đến việc trình nghe được thêm nhiều lần. Trả về bộ phát, vì vậy các cuộc gọi có thể được xâu chuỗi. |
2 | on(event, listener)
Thêm một listener vào cuối mảng cho sự kiện đã chỉ định. Không có kiểm tra nào được thực hiện để xem listener đã được thêm chưa. Nhiều cuộc gọi chuyển qua cùng một tổ hợp sự kiện và trình nghe sẽ dẫn đến việc trình nghe được thêm nhiều lần. Trả về bộ phát, vì vậy các cuộc gọi có thể được xâu chuỗi. |
3 | once(event, listener)
Thêm listener một lần vào sự kiện. Trình nghe này chỉ được gọi vào lần tiếp theo khi sự kiện được kích hoạt, sau đó nó sẽ bị xóa. Trả về bộ phát, vì vậy các cuộc gọi có thể được xâu chuỗi. |
4 | removeListener(event, listener)
Xóa một listener khỏi mảng cho sự kiện đã chỉ định. Thận trọng – Nó thay đổi các chỉ số mảng trong mảng trình nghe phía sau trình nghe. removeListener sẽ xóa tối đa một phiên bản của trình nghe khỏi mảng trình listener. Nếu bất kỳ trình nghe đơn lẻ nào đã được thêm nhiều lần vào mảng trình nghe cho sự kiện đã chỉ định, thì removeListener phải được gọi nhiều lần để xóa từng phiên bản. Trả về bộ phát, vì vậy các cuộc gọi có thể được xâu chuỗi. |
5 | removeAllListeners([event])
Xóa tất cả listener hoặc listener của sự kiện đã chỉ định. Không nên xóa các trình listener đã được thêm vào ở nơi khác trong mã, đặc biệt khi nó nằm trên trình phát mà bạn không tạo (ví dụ: ổ cắm hoặc luồng tệp). Trả về bộ phát, vì vậy các cuộc gọi có thể được xâu chuỗi. |
6 | setMaxListeners(n)
Theo mặc định, EventEmitters sẽ in cảnh báo nếu có hơn 10 listener được thêm vào một sự kiện cụ thể. Đây là một mặc định hữu ích giúp tìm rò rỉ bộ nhớ. Rõ ràng là không phải tất cả các Bộ phát nên được giới hạn ở 10. Chức năng này cho phép tăng số lượng đó lên. Đặt thành 0 cho không giới hạn. |
7 | listeners(event)
Trả về một mảng listener cho sự kiện đã chỉ định. |
8 | emit(event, [arg1], [arg2], […])
Thực hiện từng listeners theo thứ tự với các đối số được cung cấp. Trả về true nếu sự kiện có listener, ngược lại là false. |
phương pháp lớp
STT. | Phương pháp & Mô tả |
---|---|
1 | listenerCount(emitter, event)
Trả về số lượng listener cho một sự kiện nhất định. |
Sự kiện
STT. | Sự kiện & Mô tả |
---|---|
1 | newListener
Sự kiện này được phát ra bất cứ khi nào một listener được thêm vào. Khi sự kiện này được kích hoạt, listener có thể chưa được thêm vào mảng listener cho sự kiện. |
2 | removeListener
Sự kiện này được phát ra bất cứ khi nào ai đó xóa listener. Khi sự kiện này được kích hoạt, listener có thể chưa bị xóa khỏi mảng listener cho sự kiện. |
Ví dụ
Tạo một tệp js có tên main.js với mã Node.js sau –
var events = require('events'); var eventEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); var eventListeners = require('events').EventEmitter.listenerCount (eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); // Fire the connection event eventEmitter.emit('connection'); // Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event eventEmitter.emit('connection'); eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); console.log("Program Ended.");
Bây giờ hãy chạy main.js để xem kết quả –
$ node main.js
Xác minh đầu ra.
2 Listner(s) listening to connection event listner1 executed. listner2 executed. Listner1 will not listen now. listner2 executed. 1 Listner(s) listening to connection event Program Ended.