Mở đầu
Tiếp nối series Cùng học Nodejs. Ở bài trước mình đã đi qua Những Khái Niệm Cơ Bản trong Nodejs. Trong phần này, mình xin tiếp tục giới thiệu các bạn khái niệm EventEmitter
và sự hữu ích của nó trong Nodejs.
Giới thiệu
Đối với những bạn đã học về Nodejs chắc hẳn cũng đã nghe qua ít nhất một lần về sự kiện này. Sự kiện emit hay EventEmitter là một sự kiện có sẵn bên trong Nodejs, hiện tại có rất nhiều cách để sử dụng EventEmitter này. Cùng mình khám phá sự thú vị của nó nhé!
Gán và Gọi sự kiện bằng Emit
Đầu tiên, để sử dụng được EventEmitter mình sẽ import
nó vào bên trong file
Type ESM
import { EventEmitter } from 'node:events'
const event = new EventEmitter()
Type CLS
const { EventEmitter } = require('events')
const event = new EventEmitter()
Đối với sự kiện event.on()
khi một hành động bất kỳ gọi đến tên của sự kiện được gán, hàm thực thi bên trong event.on()
sẽ kích hoạt một cách đồng bộ.
main.js
event.on('clicked', () => {
console.log('Hello There!')
})
Như ví dụ trên. Khi sự kiện clicked
được kích hoạt mình sẽ nhận được log ‘Hello There!’
Mình sẽ thêm 1 chút thú vị tại đây nhé.
main.js
event.on('clicked', () => {
console.log('Hello There!')
})
event.emit('clicked')
event.emit('clicked')
event.emit('clicked')
Như vậy, sự kiện clicked
đã được kích hoạt 1 cách đồng bộ và mình đã nhận được 3 logs ‘Hello There!’
Truyền đối số
Quay trở lại ví dụ ban đầu ở mục trên.
Vậy nếu trường hợp function truyền vào sự kiện clicked có tham số thì sao?
main.js
event.on('clicked', (a, b, ...params) => {
console.log('Hello There!')
})
Đến lúc sử dụng sự kiện emit. Mình sẽ truyền đối số cho hàm xử lý bên trong sự kiện clicked
bằng event.emit()
main.js
event.on('clicked', (a, b, ...params) => {
console.log('Hello There!')
console.log(a + b)
console.log(params)
})
event.emit('clicked', (1, 2, 3, 4))
Lúc này khi sự kiện clicked
được kích hoạt bởi emit mình sẽ nhận được 3 dòng logs lần lượt là: Hello There!
, 3
, và [3, 4]
Tạo một sự kiện mới
Như đã biết, ở VanillaJS có rất nhiều sự kiện mở như click
, dblclick
, change
… Mình sẽ tạo thêm một sự kiện error
mới bằng event.emit()
kèm dòng log ‘Error: Whoops! there was an error’. Xem nhé!
main.js
event.on('error', (err) => {
console.log(`${err}! there was an error`)
})
event.emit('error', new Error('Whoops'))
Kết
Như đã thấy, mình đã đi qua các phần của EventEmitter
một cách cơ bản nhất. Vì đây là phần cơ bản và dễ tiếp cận, nên có nhiều điều thú vị hơn nữa mình chưa đề cập đến trong bài viết. Các bạn có thể xem thêm tại đây.