Emitting event in Node.js

2019-08-22 16:46发布

问题:

I'm trying to teach myself both javascript and nodejs at the same time here and have not been able to get custom event emitting working. I am not receiving any errors, just not seeing the event being emitted. Is someone able to point out my (likely obvious) logical error?

I have a class declared in a separate module:

var util = require( 'util' ),
events = require( 'events' );


function logger(){
    var logpath, initialised, logstream;
    events.EventEmitter.call(this);
}
util.inherits(logger, events.EventEmitter);

logger.prototype.init = function(){
    this.emit( 'initialised' );
}

exports.logger = logger;

And then a main file:

var logger = require( "./logManager" ).logger;

var myLogger = new logger;

myLogger.init();

myLogger.on( 'initialised' ){
     console.log( "IT'S ALIVE!" );
}

回答1:

First off, you have a syntax error in your main file. When you attach an event handler, that event handler is always a function, and the signature is on(eventName, eventHandler), so you need:

myLogger.on('initialised', function() {
    console.log("IT'S ALIVE!");
});

Also, you have to attach the event handler before you call init, or you will miss the event, so in full:

var logger = require( "./logManager" ).logger;

var myLogger = new logger;

myLogger.on('initialised', function() {
    console.log("IT'S ALIVE!");
});

myLogger.init();