async-stream-emitter
EventEmitter using ConsumableStream.
Methods:
- emit(eventName, data)
- listener(eventName)
- closeListener(eventName)
- closeAllListeners()
Usage examples
let emitter = new AsyncStreamEmitter();
(async () => {
await wait(10);
emitter.emit('foo', 'hello');
emitter.closeListener('foo');
})();
(async () => {
for await (let data of emitter.listener('foo')) {
}
console.log('The listener was closed.');
})();
function wait(duration) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, duration);
});
}
Note that unlike with EventEmitter
, you cannot get the count for the number of active listeners at any given time.
This is intentional as it encourages code to be written in a more declarative style and lowers the risk of memory leaks.
If you want to track listeners, you should do it yourself.
The new ECMAScript Symbol
type should make tracking object references easier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol