vendredi 13 janvier 2017

Node.js: Single EventEmitter Object with Emitters and Listeners across many files

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

  1. eventEmitter.js - this creates a new EventEmitter object and exports it
  2. eventGenerator.js - this emits events using the emitEvent.js
  3. listenEvent.js - this listens to events using emitEvent.js

I'm using require in eventGenerator.js and listenEvent.s 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.

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.

Am I missing something trivial here?

Thanks in advance!

Aucun commentaire:

Enregistrer un commentaire