node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



Build Status SemVer License

Event emitter with glob support on event names and asynchronous listeners, for node and the browser


  • Inherits all features from glob-events
  • Pass a callback as the last argument to emit and receive asynchronous errors and return values from listeners
  • 100% test coverage

Install with npm

npm install async-glob-events

Browser support

Use Browserify to create a standalone file.


var AsyncEmitter = require('async-glob-events').AsyncEmitter;
var asyncEmitter = new AsyncEmitter();
asyncEmitter.on('add', function (a, b, callback) {
  setTimeout(function () {
    callback(null, a + b);
  }, 100);
asyncEmitter.emit('add', 3, 4, function (err, value) {
  assert.equal(value, 7);

Listeners may also return value immediately:

asyncEmitter.on('add', function (a, b) {
  return a + b;

This makes it possible to change an implementation from synchronous to asynchronous without modifying the caller.

The callback passed to emit is only invoked once all invoked listeners returned.

AsyncEmitter API

The API is identical to glob-events with these additions:

  • emit(event[, ...], callback) will invoke the given callback once all listeners yielded. The callback is called with (err, value).
  • emit({ event : 'name', allResults : true }[, ...], callback) retrieves an array with all non-undefined return values of all listeners.
  • invoke(iterator, scope[, callback]) is an async override of the glob-events implementation. The given callback is invoked once all listeners yielded.
  • this.callback() in listeners returns a callback which has to be invoked for emit to yield. this.callback is a listen instance.