Nâng CaoNode.js iconNode.js

Event Emitter trong Node.js là gì? Cách dùng?

EventEmitter implement Observer/pub-sub pattern — backbone của Node.js internals (streams, http.Server, process đều extend EventEmitter).

  • API cơ bản: .on('event', listener) đăng ký persistent listener, .once('event', listener) tự remove sau lần emit đầu tiên, .emit('event', ...args) kích hoạt đồng bộ tất cả listeners, .off('event', listener) hoặc .removeListener() để unsubscribe.
  • Memory leak warning: Node.js warn khi > 10 listeners trên cùng event (MaxListenersExceededWarning) — dùng emitter.setMaxListeners(20) nếu cố ý, hoặc fix leak.
  • Thường quên .removeListener() trong component unmount/cleanup → listeners tích lũy.
  • Error convention: event tên 'error' đặc biệt — nếu emit 'error' mà không có listener thì throw uncaughtException crash process.
  • Practical patterns: class OrderService extends EventEmitter { async createOrder(data) { const order = await db.save(data); this.emit('order:created', order); } } — services khác lắng nghe event thay vì coupling trực tiếp. .once() dùng cho one-time setup: server.once('listening', () => console.log('ready')).
  • Async listeners: EventEmitter không await async listeners — unhandled promise trong listener → silent failure.

Xem toàn bộ Node.js cùng filter theo level & chủ đề con.

Mở danh sách Node.js