Evan P
Evan P

Reputation: 1817

Bridge two event listeners with a single event

I am trying to "bridge" two event listeners as to trigger them with a single event. Moreover, during this "chain" I could pass extra values as arguments to the listeners that follow.

I tried to implement it by as follows

var events = require('events');

var receiv = new events.EventEmitter();
var midl = new events.EventEmitter();

receiv.on("test", function() {
    console.log("HERE", arguments);
});

midl.on("test", receiv.on.bind(receiv, "test", "foo", "bar"));

midl.emit("test", 123);

Yet this approach seems to bug the EventEmitter as I am getting the following error

TypeError: listener must be a function
    at TypeError (<anonymous>)
    at EventEmitter.addListener (events.js:130:11)
    at EventEmitter.emit (events.js:95:17)
    at Object.<anonymous> (myEventTest.js:12:6)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)

Cheers.

P.S. I use node v0.10.5

Upvotes: 1

Views: 517

Answers (1)

Evan P
Evan P

Reputation: 1817

Sorry for the self answer, but I found the solution.

var events = require('events');

var receiv = new events.EventEmitter();
var midl = new events.EventEmitter();

receiv.on("test", function() {
    console.log("HERE", arguments);
});

midl.on("test", receiv.emit.bind(receiv, "test", "foo", "bar"));

midl.emit("test", 123);

Upvotes: 2

Related Questions