Node.js - Sự kiện: Hướng dẫn cho người mới bắt đầu
Xin chào các bạn future Node.js wizards! Hôm nay, chúng ta sẽ bắt đầu một hành trình đầy.exciting vào thế giới của Node.js Events. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ cùng khám phá chủ đề này từng bước một. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và cùng nhau vào cuộc!
什么是 Node.js 中的 Sự kiện?
Trước khi chúng ta đi vào chi tiết, hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng bạn đang tham gia một buổi tiệc (tất nhiên là buổi tiệc Node.js!). Bạn đang trò chuyện với bạn bè, và bỗng nhiên ai đó喊道, "Pizza đến rồi!" Lời喊 là một sự kiện, và phản ứng của bạn - có thể là chạy đi lấy một miếng - là cách bạn xử lý sự kiện đó.
Trong Node.js, sự kiện hoạt động tương tự. Chúng là những điều xảy ra trong chương trình của bạn, và bạn có thể thiết lập các phản ứng cụ thể (chúng ta gọi chúng là "nghe giả") để phản ứng khi các sự kiện này xảy ra.
Lớp EventEmitter
Tại trung tâm của các sự kiện Node.js là một thứ gọi là lớp EventEmitter
. Hãy tưởng tượng nó như một người tổ chức buổi tiệc có trách nhiệm喊出 thông báo (phát ra sự kiện) và đảm bảo rằng tất cả những người muốn nghe về pizza (hoặc bất kỳ sự kiện nào khác) đều nhận được tin nhắn.
Hãy xem cách chúng ta có thể tạo riêng EventEmitter của mình:
const EventEmitter = require('events');
// Tạo một đối tượng EventEmitter mới
const myEmitter = new EventEmitter();
Trong đoạn mã này, chúng ta đầu tiên nhập module events
, cho phép chúng ta truy cập vào lớp EventEmitter. Sau đó, chúng ta tạo một instance mới của EventEmitter gọi là myEmitter
. Đối tượng myEmitter
này bây giờ có thể phát ra và lắng nghe các sự kiện.
Phát ra và Xử lý Sự kiện
Bây giờ chúng ta đã có EventEmitter, hãy học cách sử dụng nó. Chúng ta sẽ bắt đầu với hai phương thức quan trọng nhất: on()
và emit()
.
Phương thức on()
Phương thức on()
được sử dụng để gắn một hàm nghe giả vào một sự kiện. Nó giống như nói với bạn bè, "Hey, hãy thông báo cho tôi khi pizza đến!"
Dưới đây là cách chúng ta sử dụng nó:
myEmitter.on('pizzaArrived', () => {
console.log('Yay! The pizza is here!');
});
Trong ví dụ này, chúng ta đang nói với myEmitter
để lắng nghe sự kiện 'pizzaArrived'. Khi sự kiện này xảy ra, nó sẽ chạy hàm chúng ta cung cấp, đơn giản là ghi một thông báo vào console.
Phương thức emit()
Phương thức emit()
được sử dụng để kích hoạt một sự kiện. Nó giống như thực sự喊 "Pizza's here!" tại buổi tiệc.
Hãy xem cách nó hoạt động:
myEmitter.emit('pizzaArrived');
Khi dòng này chạy, nó sẽ kích hoạt sự kiện 'pizzaArrived', và bất kỳ nghe giả nào gắn vào sự kiện này sẽ chạy hàm của chúng.
Hãy kết hợp tất cả lại:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('pizzaArrived', () => {
console.log('Yay! The pizza is here!');
});
myEmitter.emit('pizzaArrived');
// Output: Yay! The pizza is here!
Chạy đoạn mã này, và bạn sẽ thấy thông báo được in ra console. Chúc mừng! Bạn vừa tạo và xử lý sự kiện Node.js đầu tiên của mình!
Truyền Tham số với Sự kiện
Đôi khi, bạn muốn truyền thêm thông tin cùng với sự kiện. Ví dụ, có thể bạn muốn chỉ định loại pizza đã đến. Chúng ta có thể làm điều này bằng cách truyền tham số cho phương thức emit()
:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('pizzaArrived', (type) => {
console.log(`Yay! The ${type} pizza is here!`);
});
myEmitter.emit('pizzaArrived', 'pepperoni');
// Output: Yay! The pepperoni pizza is here!
Trong ví dụ này, chúng ta truyền 'pepperoni' như một tham số khi chúng ta phát ra sự kiện. Hàm nghe giả có thể sử dụng tham số này trong phản ứng của nó.
Nhiều Nghe giả
Bạn có thể gắn nhiều nghe giả vào cùng một sự kiện. Hãy tưởng tượng rằng những người khác nhau tại buổi tiệc muốn phản ứng khác nhau khi pizza đến:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('pizzaArrived', () => {
console.log('Person 1: I\'ll grab the plates!');
});
myEmitter.on('pizzaArrived', () => {
console.log('Person 2: I\'ll pour the drinks!');
});
myEmitter.on('pizzaArrived', () => {
console.log('Person 3: I\'ll put on some music!');
});
myEmitter.emit('pizzaArrived');
// Output:
// Person 1: I'll grab the plates!
// Person 2: I'll pour the drinks!
// Person 3: I'll put on some music!
Khi bạn chạy đoạn mã này, bạn sẽ thấy tất cả các phản ứng được in ra console. Các nghe giả được gọi theo thứ tự chúng được đăng ký.
Nghe giả Một lần
Đôi khi, bạn chỉ muốn lắng nghe một sự kiện một lần. Đối với điều này, chúng ta có phương thức once()
. Nó giống như nói, "Chỉ cần thông báo cho tôi khi pizza đầu tiên đến, sau đó tôi không cần biết nữa."
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.once('pizzaArrived', () => {
console.log('The first pizza has arrived!');
});
myEmitter.emit('pizzaArrived');
// Output: The first pizza has arrived!
myEmitter.emit('pizzaArrived');
// No output
Trong ví dụ này, lần thứ hai emit()
không tạo ra bất kỳ đầu ra nào vì nghe giả đã bị xóa sau khi chạy một lần.
Sự kiện Lỗi
Trong Node.js, có một sự kiện đặc biệt gọi là 'error'. Nếu một sự kiện lỗi được phát ra và không có nghe giả nào cho nó, Node.js sẽ in ra stack trace và thoát khỏi chương trình. Luôn là một thói quen tốt để có một nghe giả lỗi:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('error', (err) => {
console.error('Oops! Something went wrong:', err);
});
myEmitter.emit('error', new Error('The pizza oven broke!'));
// Output: Oops! Something went wrong: Error: The pizza oven broke!
Xóa Nghe giả
Nếu bạn không muốn lắng nghe một sự kiện nữa, bạn có thể xóa nghe giả bằng phương thức removeListener()
:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
function pizzaHandler() {
console.log('Pizza time!');
}
myEmitter.on('pizzaArrived', pizzaHandler);
myEmitter.emit('pizzaArrived');
// Output: Pizza time!
myEmitter.removeListener('pizzaArrived', pizzaHandler);
myEmitter.emit('pizzaArrived');
// No output
Tóm tắt các Phương thức của EventEmitter
Dưới đây là bảng tóm tắt các phương thức chính chúng ta đã xem xét:
Phương thức | Mô tả |
---|---|
on(eventName, listener) |
Thêm một hàm nghe giả vào sự kiện được chỉ định |
emit(eventName[, ...args]) |
Kích hoạt sự kiện được chỉ định, tùy chọn với các tham số |
once(eventName, listener) |
Thêm một hàm nghe giả một lần vào sự kiện được chỉ định |
removeListener(eventName, listener) |
Xóa một nghe giả cụ thể khỏi sự kiện được chỉ định |
removeAllListeners([eventName]) |
Xóa tất cả các nghe giả, hoặc những nghe giả của sự kiện được chỉ định |
Và đó là tất cả! Bạn đã bước đầu vào thế giới của các sự kiện Node.js. Nhớ rằng, thực hành làm nên hoàn hảo, vì vậy đừng ngại thử nghiệm với các khái niệm này. Thử tạo riêng các sự kiện của bạn, có thể là cho một trò chơi đơn giản hoặc một ứng dụng chat.
Khi bạn tiếp tục hành trình trong Node.js, bạn sẽ thấy rằng các sự kiện là một công cụ mạnh mẽ để tạo ra các ứng dụng phản hồi,驱动的. Chúng được sử dụng rộng rãi trong nhiều ứng dụng và thư viện Node.js, vì vậy việc hiểu chúng tốt sẽ mang lại lợi ích lớn cho các dự án tương lai của bạn.
Tiếp tục mã hóa, tiếp tục học hỏi, và quan trọng nhất, tiếp tục vui vẻ! Và nhớ rằng, dù là mã hóa hay pizza, chúng đều tốt hơn khi chia sẻ cùng bạn bè. Chúc bạn vui vẻ với Node.js!
Credits: Image by storyset