What is event-emitter?
The event-emitter npm package is a lightweight and flexible library for managing events in JavaScript. It allows you to create, listen to, and emit events, making it easier to handle asynchronous operations and decouple different parts of your application.
What are event-emitter's main functionalities?
Creating an Event Emitter
This feature allows you to create a new event emitter instance. The instance can be used to manage events within your application.
const EventEmitter = require('event-emitter');
const emitter = EventEmitter();
Listening to Events
This feature allows you to listen for specific events. When the event is emitted, the provided callback function is executed.
emitter.on('event', function(data) {
console.log('Event received:', data);
});
Emitting Events
This feature allows you to emit events. When an event is emitted, all listeners for that event are called with the provided data.
emitter.emit('event', { key: 'value' });
Removing Event Listeners
This feature allows you to remove specific event listeners. This is useful for cleaning up and preventing memory leaks.
const callback = function(data) {
console.log('Event received:', data);
};
emitter.on('event', callback);
emitter.off('event', callback);
Other packages similar to event-emitter
events
The 'events' package is a core Node.js module that provides a similar event-driven architecture. It is more robust and feature-rich compared to event-emitter, offering additional functionalities like once listeners and error handling.
eventemitter3
The 'eventemitter3' package is a high-performance event emitter for Node.js and the browser. It is similar to event-emitter but is optimized for speed and has a smaller footprint.
mitt
The 'mitt' package is a tiny, functional event emitter. It is simpler and more lightweight compared to event-emitter, making it ideal for small projects or performance-critical applications.
event-emitter
Environment agnostic event emitter
Installation
$ npm install event-emitter
To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: Browserify, Webmake or Webpack
Usage
var ee = require('event-emitter');
var emitter = ee({}), listener;
emitter.on('test', listener = function (args) {
});
emitter.once('test', function (args) {
});
emitter.emit('test', arg1, arg2);
emitter.emit('test', arg1, arg2);
emitter.off('test', listener);
emitter.emit('test', arg1, arg2);
Additional utilities
allOff(obj) (event-emitter/all-off)
Removes all listeners from given event emitter object
hasListeners(obj[, name]) (event-emitter/has-listeners)
Whether there are any listeners attached to the object.
If name
is provided, it checks whether are there any listeners attached for specific event
var emitter = ee();
var hasListeners = require('event-emitter/has-listeners');
var listener = function () {};
hasListeners(emitter);
emitter.on('foo', listener);
hasListeners(emitter);
hasListeners(emitter, 'foo');
hasListeners(emitter, 'bar');
emitter.off('foo', listener);
hasListeners(emitter, 'foo');
pipe(source, target/, emitMethodName/) (event-emitter/pipe)
Pipes all events from source emitter onto target emitter (all events from source emitter will be emitted also on target emitter, but not other way).
Returns pipe object which exposes pipe.close
function. Invoke it to close configured pipe.
It works internally by redefinition of emit
method, if in your interface this method is referenced differenetly, provide its name (or symbol) with third argument.
unify(emitter1, emitter2) (event-emitter/unify)
Unifies event handling for two objects. Events emitted on emitter1 would be also emitter on emitter2, and other way back, events emitter on emitter2 would be emitter on emitter1 (both objects share same listeners collection).
Non reversible.
var eeUnify = require('event-emitter/unify');
var emitter1 = ee(), listener1, listener3;
var emitter2 = ee(), listener2, listener4;
emitter1.on('test', listener1 = function () { });
emitter2.on('test', listener2 = function () { });
emitter1.emit('test');
emitter2.emit('test');
var unify = eeUnify(emitter1, emitter2);
emitter1.emit('test');
emitter2.emit('test');
emitter1.on('test', listener3 = function () { });
emitter2.on('test', listener4 = function () { });
emitter1.emit('test');
emitter2.emit('test');
Tests
$ npm test