Socket
Socket
Sign inDemoInstall

event-done

Package Overview
Dependencies
1
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    event-done

Extension of EventEmitter which allows to pass callback that will be invoked when all listeners completed


Version published
Weekly downloads
2
increased by100%
Maintainers
1
Install size
900 kB
Created
Weekly downloads
 

Readme

Source

event-done

Extension of EventEmitter which allows to pass callback that will be invoked when all listeners completed

Usage

  1. 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);
    });
    
  2. 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);
    });
    
  3. 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!');
    });
    

FAQs

Last updated on 16 Jul 2014

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc