/ / Cách sử dụng bộ phát sự kiện trong Node.js

Cách sử dụng bộ phát sự kiện trong Node.js

woman holding nodejs sticker

Bộ phát sự kiện là các đối tượng trong NodeJS kích hoạt các sự kiện bằng cách gửi một thông điệp để báo hiệu rằng một hành động đã xảy ra.


Node.js cung cấp một mô-đun sự kiện tích hợp sẵn. Nó chứa một lớp phát sự kiện cho phép bạn tạo và xử lý các sự kiện tùy chỉnh thông qua các hàm gọi lại.

Ở đây bạn sẽ học cách phát ra sự kiện, lắng nghe và xử lý dữ liệu sự kiện cũng như xử lý lỗi sự kiện trong NodeJS.


Sự kiện phát ra

Mô-đun sự kiện là một phần cốt lõi của môi trường phía máy chủ Node.js. Vì vậy, bạn không cần phải cài đặt nó, nhưng trước khi sử dụng EventEmitter bạn phải nhập từ mô-đun sự kiện và khởi tạo nó.

Như vậy:

const EventEmitter = require("events");


const myEmitter = new EventEmitter();

Bạn có thể tạo ra các sự kiện bằng cách sử dụng EventEmitter‘S phát ra phương pháp. Các phát ra phương pháp mất một eventName và một số đối số tùy ý làm tham số.

Khi bạn gọi phát ra phương thức, nó phát ra eventName. Sau đó, nó gọi đồng bộ từng trình nghe của sự kiện theo thứ tự bạn đã đăng ký chúng, chuyển các đối số được cung cấp cho từng trình nghe. Cuối cùng, nó trở lại thật nếu sự kiện có người nghe và sai nếu nó không có bất kỳ người nghe nào.

Ví dụ:

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

Trong khối mã ở trên, bạn đã vượt qua TestEvent như là EventName,“foo“quán ba12 như các đối số. Khi khối mã trên chạy, nó sẽ thông báo cho tất cả các thính giả đang nghe TestEvent biến cố. Nó sẽ gọi những người nghe đó với các đối số đã cho.

Lắng nghe sự kiện

Bạn có thể nghe các sự kiện phát ra bằng cách sử dụng EventEmitter‘S trên phương pháp. Các trên phương pháp mất một EventName và một hàm gọi lại dưới dạng các tham số. Khi sự kiện với EventName truyền vào trên phương thức được phát ra, nó gọi hàm gọi lại của nó. Phương thức này trả về một tham chiếu đến EventEmittercho phép bạn xâu chuỗi nhiều cuộc gọi.

Ví dụ:


myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});


myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
console.log(`Event emitted with the following arguments: ${args}`);
});

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

Trong khối mã ở trên, khi TestEvent sự kiện phát ra, người nghe cho sự kiện sẽ gọi các hàm gọi lại của họ. Người nghe sẽ phản ứng theo thứ tự mà bạn đã đăng ký, nghĩa là lệnh gọi lại của “người nghe đầu tiên” sẽ chạy trước lần thứ hai, v.v.

Bạn có thể thay đổi hành vi này bằng cách sử dụng EventEmitter‘S prependListener phương pháp. Phương thức này nhận các tham số giống như trên phương pháp. Sự khác biệt là phương thức này phản ứng với sự kiện trước, bất kể thời gian bạn đăng ký.

Ví dụ:

myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});

myEmitter.prependListener("TestEvent", () => {
console.log("Executes first")
})

// console.log(myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

Khi khối mã ở trên thực thi, “Thực thi trước” sẽ được ghi đầu tiên vào bảng điều khiển, tiếp theo là “TestEvent đã được gửi đi !!!” bất kể thứ tự bạn đã đăng ký họ là gì vì prependListener phương pháp.

Nếu bạn đăng ký nhiều người nghe với prependListener chúng sẽ chạy theo thứ tự từ cuối cùng đến đầu tiên.

Lưu ý sự sắp xếp của người phát và người nghe. Người nghe luôn đến trước người phát. Sự sắp xếp này là do người nghe phải đã lắng nghe sự kiện trước khi bộ phát phát ra nó.

Đối với ngữ cảnh, hãy xem xét khối mã bên dưới:

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});

Nếu bạn chạy khối mã ở trên, không có gì xảy ra bởi vì, tại thời điểm bộ phát phát ra sự kiện, không có người nghe nào đang nghe sự kiện.

Lắng nghe sự kiện một lần

Tùy thuộc vào yêu cầu của bạn, bạn có thể chỉ cần xử lý một số sự kiện một lần trong vòng đời ứng dụng của mình. Bạn có thể đạt được điều này bằng cách sử dụng EventEmitter‘S Một lần phương pháp.

Phương thức này nhận các đối số giống như trên phương pháp và hoạt động tương tự. Sự khác biệt duy nhất là người nghe đã đăng ký với Một lần phương pháp chỉ lắng nghe sự kiện một lần.

Ví dụ:

myEmitter.once("SingleEvent", () => {
console.log("Event handled once");
});

myEmitter.emit("SingleEvent"); // Event handled once
myEmitter.emit("SingleEvent"); // Ignored
myEmitter.emit("SingleEvent"); // Ignored

Việc chạy khối mã sẽ chỉ ghi “Sự kiện được xử lý một lần” vào bảng điều khiển một lần, bất kể tần suất bộ phát phát ra sự kiện.

Người nghe đã đăng ký với Một lần phương thức phản ứng với sự kiện theo thứ tự bạn đăng ký chúng. Bạn có thể thay đổi hành vi này bằng cách sử dụng prependOnceListener phương pháp này hoạt động giống như prependListener. Sự khác biệt duy nhất là người nghe đã đăng ký với Một lần phương pháp chỉ lắng nghe sự kiện một lần.

Xử lý lỗi với bộ phát sự kiện

Bạn nên cẩn thận để xử lý các lỗi JavaScript một cách thích hợp và trình nghe sự kiện cũng không ngoại lệ. Các lỗi chưa được xử lý từ chúng sẽ khiến quá trình Node.js thoát ra và ứng dụng của bạn gặp sự cố.

Để xử lý một sự kiện lỗi, ít nhất một trong các trình lắng nghe của sự kiện phải có EventName đặt thành lỗi.

Ví dụ:

myEmitter.on("error", (error) => {
console.error(`Error: ${error}`);
});

Việc có một trình nghe xử lý một lỗi tiềm ẩn, như trong khối mã ở trên, sẽ ngăn ứng dụng bị treo khi xảy ra lỗi.

Ví dụ:

myEmitter.emit("error", new Error("This is an error"));

Chạy khối mã ở trên sẽ ghi “Đây là lỗi” vào bảng điều khiển vì người nghe đang xử lý các sự kiện lỗi.

Quản lý người nghe sự kiện

Các EventEmitter lớp có một số phương thức cho phép bạn thao tác và quản lý trình nghe sự kiện. Bạn có thể lấy người nghe của một sự kiện, xóa họ và đặt số lượng người nghe tối đa cho một sự kiện.

Đây là một bảng chứa EventEmitter các phương pháp bạn có thể thao tác với trình nghe Sự kiện bằng:

Phương pháp Tranh luận Giá trị trả lại
ListeningCount eventName Trả về số lượng người nghe đã đăng ký một sự kiện
người nghe eventName Trả về một mảng người nghe
removeListener eventName Loại bỏ ít nhất một trình nghe khỏi một eventName được chỉ định.
removeAllListists eventName Loại bỏ tất cả các trình nghe cho một eventName được chỉ định. Nếu bạn không chỉ định tên sự kiện, cuộc gọi phương thức này sẽ xóa tất cả các trình lắng nghe cho EventEmitter.
setMaxListists con số Thay đổi số lượng người nghe tối đa mặc định cho mỗi sự kiện. Sử dụng vô cùng hoặc không để biểu thị số lượng người nghe không giới hạn. Theo mặc định, bạn chỉ có thể đăng ký mười người nghe cho một sự kiện.

Bạn chỉ có thể gọi các phương thức này trên một EventEmitter ví dụ.

Ví dụ:

myEmitter.removeListener("TestEvent");

Khối mã ở trên loại bỏ một trình nghe duy nhất cho TestEvent biến cố.

Tầm quan trọng của bộ phát sự kiện

Node.js áp dụng mô hình lập trình hướng sự kiện với sự hỗ trợ của nó cho bộ phát và bộ nghe sự kiện. Lập trình theo hướng sự kiện là một trong những lý do khiến các chương trình Node.js nhanh hơn và đơn giản hơn so với một số lựa chọn thay thế. Bạn có thể dễ dàng đồng bộ hóa nhiều sự kiện, giúp cải thiện hiệu quả.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *