event-done
v0.0.2
Published
Extension of EventEmitter which allows to pass callback that will be invoked when all listeners completed
Downloads
4
Readme
event-done
Extension of EventEmitter which allows to pass callback that will be invoked when all listeners completed
Usage
- We can have multiple listeners attached to the same event, but final callback will be called only once
var EventDone = require('event-done').EventDone; var event = new EventDone(); event.on('test', function (data, next) { console.log('I am listener one'); next(null); }); event.on('test', function (data, next) { console.log('I am listener two'); next(null); }); event.on('test', function (data, next) { console.log('I am listener three'); setTimeout(next, 100); }); event.emit('test', {some: 'data'}, function finish(error) { console.log('I am called only once after all three listeners'); console.log('Error is empty:', error); });
- Let's assume that one of listeners did not call it's callback. In this case final callback will be called with error of type EventDoneTimeoutError
var EventDone = require('event-done').EventDone; var EventDoneTimeoutError = require('event-done').EventDoneTimeoutError; require('event-done').timeout = 100; console.log('Fallback timeout can be set to anything.', 'Default is 30s and we set it to 100ms'); var event = new EventDone(); event.on('test', function (data, next) { console.log('I am listener one', 'Oops, I forgot to call "next"'); }); event.on('test', function (data, next) { console.log('I am listener two'); next(null); }); event.emit('test', {some: 'data'}, function finish(error) { console.log('I am called after 100ms "fallback" timeout'); console.log('error is not empty and is instance if EventDoneTimeoutError:', error instanceof EventDoneTimeoutError); });
- In case of any listener fails, final callback is instantly called with that error
var EventDone = require('event-done').EventDone; var event = new EventDone(); event.on('test', function (data, next) { console.log('I am listener one'); next(new Error('OMFG!')); }); event.on('test', function (data, next) { console.log('I am listener two', 'I will still output this to console, but after final callback'); next(null); }); event.emit('test', {some: 'data'}, function finish(error) { console.log('I am called after first listener called'); console.log('error is not empty and it is "OMFG!":', (error instanceof Error) && error.message === 'OMFG!'); });