NodeJS hỗ trợ các sự kiện trong ứng dụng rất hoàn hảo. Mỗi hành động trên máy tính là một sự kiện. Ví dụ, khi bạn đọc một tập tin trên ổ cứng. Có nghĩa là bạn phải thực hiện 2 thao tác "mở file" và "đóng file" sau khi đọc xong, nên ở đây chúng ta có 2 sự kiện "Open" & "Close". Dựa trên các sự kiện, bạn chèn mã của mình để làm điều gì đó
var fs = require['fs'];
// Create a stream to read file
var rs = fs.createReadStream['C:/test/demo.txt'];
// The event 'open':
rs.on['open', function[] {
console.log['File opened!'];
}];
Các sự kiện trong mô-đun cung cấp cho bạn một lớp EventEmitter, là lớp trung tâm trong NodeJS, hỗ trợ xác định một sự kiện, đăng ký Người nghe của sự kiện này và phát ra [phát] sự kiện
Người nghe
Trong NodeJS, Listener là một hàm. Nó sẽ được gọi để thực thi khi một sự kiện xảy ra. Có thể 0, 1 hoặc nhiều Người nghe đang bị ràng buộc với sự kiện đó
Để đơn giản, hãy nhìn vào hình minh họa sau. một con chuột và một cái bẫy chuột. Một sự kiện chuẩn bị diễn ra. Khi sự kiện xảy ra [bánh bị cướp], bẫy chuột sẽ thực hiện nhiệm vụ của mình. Bẫy chuột ở đây là một "Listener", sẽ hoạt động khi sự kiện xảy ra
2- Ví dụ về EventEmitter
Nhập mô-đun Sự kiện và khai báo đối tượng EventEmitter
// Import events module
var events = require['events'];
// Create an EventEmitter object
var eventEmitter = new events.EventEmitter[];
Đăng ký Listeners [Các hàm sẽ được gọi để thực thi khi có sự kiện xảy ra]
// Add Event Listener
eventEmitter.addListener['bellRing', bellRingHandler1];
// Add Event Listener
eventEmitter.addListener['bellRing', bellRingHandler2];
Phát sự kiện
// Fire bellRing event!!
eventEmitter.emit['bellRing', 'Jerry'];
ví dụ đầu tiên. js
// Import events module
var events = require['events'];
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter[];
// A Listener
var bellRingHandler1 = function bellRingHandler1[who] {
console.log["\n"];
console.log['The Bell Ringing.... [Handler 1]'];
console.log[" " + who + " was standing behind the door!"];
if[who == 'Jerry'] {
console.log[' Tom, help me!!'];
return;
}
console.log[" Welcome " + who];
}
// A Listener
var bellRingHandler2 = function bellRingHandler2[who] {
console.log["\n"];
console.log['The Bell Ringing.... [Handler 2]'];
eventEmitter.emit["nobodyIsAtHome"];
}
// A Listener
var nobodyIsAtHomeHandler = function nobodyIsAtHomeHandler[] {
console.log["\n"];
console.log[" Sorry, Nobody is at home now, Please leave your message!"]
}
// Add Event Listeners
eventEmitter.addListener['bellRing', bellRingHandler1];
eventEmitter.addListener['bellRing', bellRingHandler2];
eventEmitter.addListener['nobodyIsAtHome', nobodyIsAtHomeHandler];
// ----- Testing ------
// Fire bellRing event!!
eventEmitter.emit['bellRing', 'Jerry'];
Chạy ví dụ
node eventemitter-examples/first-example.js
3- Lớp phát sự kiện
NoMethodDescrip1addListener[sự kiện, người nghe]
Thêm một người nghe vào cuối của mảng người nghe cho sự kiện đã chỉ định. Phương pháp này không kiểm tra xem người nghe này đã từng được thêm hay chưa.
Chính xác, phương thức này giống 100% với phương thức addListener
3once[sự kiện, người nghe]Thêm một người nghe vào mảng người nghe của sự kiện đã chỉ định. Nhưng lister này chỉ được gọi một lần khi có sự kiện xảy ra. Sau đó, nó được xóa khỏi mảng
4removeListener[sự kiện, người nghe]Xóa một người nghe khỏi mảng người nghe của sự kiện đã chỉ định. Nếu một người nghe đã được thêm vào mảng này nhiều lần. Để xóa hoàn toàn trình nghe này, bạn cần gọi phương thức này nhiều lần
5removeAllListeners[[sự kiện]]Xóa tất cả người nghe hoặc xóa tất cả người nghe của một sự kiện được chỉ định
6setMaxListeners[n]Theo mặc định, EventEmitters sẽ in cảnh báo nếu có hơn 10 người nghe đượ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. Bạn có thể đặt một số khác hoặc đặt thành 0 không giới hạn
7 người nghe[sự kiện]Trả lại một mảng người nghe cho sự kiện đã chỉ định
8emit[sự kiện,[arg1], [arg2], [. ]]
Thực hiện lần lượt từng người nghe trong mảng, với các tham số. Trả về true nếu mảng có ít nhất một người nghe. Ngược lại, trả về false