Node Fixed EventEmitter event for EventEmitter. Multiple emitters

I am trying to emit from one EventEmitter to another EventEmitter or find an alternative solution. The code below does not work.

Multiple Emitters Example

var events = require('events'); var eventEmitterOne = new events.EventEmitter(); var eventEmitterTwo = new events.EventEmitter(); eventEmitterTwo.on('fireEvent', function() { console.log('event fired'); }); eventEmitterOne.emit('fireEvent'); 

I am looking to find out if the following is possible and what changes I need to make for the following code to make it functional. Or there is another way of emitting events across multiple emitters. Thank you for your time.

+4
source share
2 answers

The problem is that two EventEmitter are separate objects.

When you call:

 var eventEmitterOne = new events.EventEmitter(); var eventEmitterTwo = new events.EventEmitter(); 

You create two separate EventEmitter . This means that when you emit events into one, you cannot fire them by activating events on the other.

There is nothing wrong with your code, just your understanding of what is going to happen.

As I like it, wrapping things in my own EventEmitter module. So I have a β€œglobal” emitter object, with some simple functional wrappers for emitting and recording events. This allows many different modules to share the same set of events, register events for other modules to run, etc.

 var eventEmitter = new (require('events').EventEmitter)(); function emitEvent(str) { 'use strict'; eventEmitter.emit(str); } function registerEvent(str, callback) { 'use strict'; eventEmitter.on(str, callback); } function registerEventOnce(str, callback) { 'use strict'; eventEmitter.once(str, callback); } exports.emitEvent = emitEvent; exports.registerEvent = registerEvent; exports.registerEventOnce = registerEventOnce; 

Just throw the above code into a file called EventFileName.js . And its use is very simple.

 var customEventEmitter = require('./EventFileName'); customEventEmitter.registerEvent('fireEvent', someCallback); customEventEmitter.emitEvent('fireEvent'); 
+6
source

Another answer cannot generate an event with arguments . So here is the improvement:

 'use strict'; var eventEmitter = new (require('events').EventEmitter)(); function emitEvent(...args) { eventEmitter.emit(...args); } function registerEvent(str, callback) { eventEmitter.on(str, callback); } function registerEventOnce(str, callback) { eventEmitter.once(str, callback); } exports.emit = emitEvent; exports.on = registerEvent; exports.once = registerEventOnce; 
-1
source

Source: https://habr.com/ru/post/1491161/


All Articles