Search code examples
javascripteventseventemitter

Javascript event emitter | Dynamic event name


Is it possible to create a unique event for each payment address?

This is not working:

var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();

function emitpayment(address) {
    ee.emit("payment"+address,data);
}

function receivepayment(address) {
     ee.on("payment"+address, function (data) { 
           // whatever
     });
}

Regards,


Solution

  • Yes you can do that. Event names in Node (well, via the stock EventEmitter anyway) are simple strings.

    You do need to make sure that the handler is registered before you start emitting events:

    var EventEmitter = require("events").EventEmitter;
    var ee = new EventEmitter();
    
    function emitpayment(address, data) {
        ee.emit("payment"+address,data);
    }
    
    function receivepayment(address) {
         ee.on("payment"+address, function (data) {
            console.log("received event payment" + address);
            console.dir(data);
         });
    }
    
    receivepayment("giant metallic balloon");
    emitpayment("giant metallic balloon", { hello: "world" } );