【问题标题】:Emitting event in Node.js在 Node.js 中发出事件
【发布时间】:2012-02-28 09:54:44
【问题描述】:

我正在尝试在这里同时自学 javascript 和 nodejs,但无法让自定义事件发出工作。我没有收到任何错误,只是没有看到正在发出的事件。有人能指出我的(可能很明显的)逻辑错误吗?

我在一个单独的模块中声明了一个类:

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;

然后是一个主文件:

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

var myLogger = new logger;

myLogger.init();

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

【问题讨论】:

    标签: node.js eventemitter


    【解决方案1】:

    首先,您的主文件中有语法错误。附加事件处理程序时,该事件处理程序始终为function,签名为on(eventName, eventHandler),因此您需要:

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

    另外,你必须在调用init之前附加事件处理程序,否则你会错过事件,所以完整:

    var logger = require( "./logManager" ).logger;
    
    var myLogger = new logger;
    
    myLogger.on('initialised', function() {
        console.log("IT'S ALIVE!");
    });
    
    myLogger.init();
    

    【讨论】:

    • 啊!语法错误只是当我将代码复制到这个问题中时,我真正的问题是在事件发出之前没有设置事件处理程序......如此简单的问题我不敢相信我错过了。非常感谢您的帮助!
    猜你喜欢
    • 2012-05-23
    • 2011-07-07
    • 2016-08-21
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多