async-glob-events.js
Event emitter with glob support on event names and asynchronous listeners, for
node and the browser
Features
- 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.
Usage
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.
License
MIT