I want one or more file to emit event(s) and multiple other files to listen to it. They should share the same instance. This what I've tried to do
To test the code, I have 3 files
eventEmitter.js
- this creates a newEventEmitter
object and exports iteventGenerator.js
- this emits events using theemitEvent.js
listenEvent.js
- this listens to events usingemitEvent.js
I'm using require
in eventGenerator.js
and listenEvent.js
and exporting the object in eventEmitter.js
, I'm hoping it follows a singleton pattern and they share the same instance.
Here are some resources I checked out, before posting this. Disclaimer: I have adapted some design/code from these files for testing.
- node.js event listener in another source file
- Singleton pattern in nodejs - is it needed?
- node.js eventEmitter : Listen for events across files
- Node event emitter in other modules
Here are the three files.
eventEmitter.js
//eventEmitter.js
var events = require('events');
var em = new events.EventEmitter();
module.exports.universalEmitter = em;
eventGenerator.js
//eventGenerator.js
var eventEMitter = require('./eventEmitter.js');
var universalEmitter = eventEmitter.universalEmitter;
setInterval(function () {
universalEmitter.emit('Hello');
console.log("emitting event\n");
}, 3000);
listenEvent.js
//listenEvent.js
var eventEmitter = require('./eventEmitter.js');
var universalEmitter = eventEmitter.universalEmitter;
universalEmitter.on('Hello',function(){
console.log('received hello\n');
});
Issues
listenEvent.js
does not receive the event and exits immediately.- If I emit and listen on the same file, it works fine.
- It looks like
listenEvent.js
andeventGenerator.js
have different instances of theem
object. Why is this happening?
Am I missing something trivial here?
Thanks in advance!