async emitter


An asynchronous event emitter for node.js and the browser. Heavily inspired by component/emitter.

Using component:

component install matthewmueller/aemitter

Using node.js:

npm install aemitter

var Emitter = require('aemitter');
var user = { name: 'matt' };
user.on('save', function(datanext) {
  // save data 
user.emit('save', data, function(err) {
  // called after all `save` callbacks have completed 

Register an event handler fn. The signature of fn will be all the arguments emitted + the next(err) function. If this function is not specified, Emitter#on will immediately return.

user.on('save', function(next) {
  // asynchronous, will wait for `next` to be called 
user.on('save', function() {
  // immediately returns 

It's important to note that next will be passed as the last argument. If Emitter#emit passes four arguments, next will be it's fifth.

Register a single-shot event handler fn, removed immediately after it is invoked the first time.

Remove event handler fn, or pass only the event name to remove all handlers for event.

Emit an event with variable option args, and a final, optional callback fn. This fn will be called when all the event callbacks have finished.

Caveat: You will need to be consistent with the emit signature, otherwise Emitter#on() callbacks will be inconsistent and likely fail. For example:

user.emit('save', data, message, fn); // main signature 
user.emit('save', data, fn); // will NOT work as expected 
user.emit('save', data, '', fn); // will work as expected 
user.emit('save', data, ''); // will also work as expected 

Return an array of callbacks, or an empty array.

Check if this emitter has event handlers.

npm install . mocha test