【问题标题】:Node.js - Event won't fire?Node.js - 事件不会触发?
【发布时间】:2013-03-08 23:36:04
【问题描述】:

我有一些代码应该监听某些事件并处理它们,但要么这些事件实际上从未发出,要么监听器从未捕获它们。

这里有两个模块:监听的服务器和处理的应用程序(应用程序是主模块)。

server.js:

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

var Server = function() {
    this.self = this;
    events.EventEmitter.call(this);

    this.socket = dgram.createSocket('udp4');
    this.init = function(port) {
        this.socket.bind(port);
        console.log('Listening on port ' + port);
    }

    this.socket.on('message', function(buf, rinfo) {
        var rawInfo = buf.toString().split('&');
        var data = {};

        for (var i = 0; i < rawInfo.length; i++) {
            var key = rawInfo[i].split('=')[0];
            var val = rawInfo[i].split('=')[1];
            data[key] = val;
        }

        var type = data.type;

        console.log('emitting event type ' + type);
        this.emit(type, data);
    });
};

util.inherits(Server, events.EventEmitter);

// exports
module.exports = Server;

(这是唯一可能创建的对象):

{   type: 'login',
    name: 'x3chaos',
    displayname: 'x3chaos',
    world: 'world' }

app.js:

var dgram  = require('dgram');
var Server = require('./server');

var server = new Server();
server.init(41234);

// FIXME
server.on('login', function(data) {
    console.log('received data');
    console.log(data);
});

这里有什么问题:是事件没有触发还是监听器没有监听?
它也可能只是我想念的东西。你知道他们怎么说两个脑袋...

TIA :)

【问题讨论】:

    标签: javascript node.js eventemitter


    【解决方案1】:

    我认为 this.emit 不会起作用,因为您在回调中,并且 this 不会引用服务器实例,而是引用回调上下文。在上面,而不是 this.self=this 尝试做 var self=this 然后在回调内部做 self.emit...

    【讨论】:

    • 我认为 this.emit 不会工作,因为你在回调中,而且 this 不会引用服务器实例,而是回调上下文。在上面,而不是 this.self=this 尝试做 var self=this 然后在回调内部做 self.emit...
    • 就是这样。 :) 这只是范围。
    • 如果您愿意,请将其作为答案提出,我会投票并接受。谢谢,@eveiga。 :)
    • 甜蜜!再次感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2014-09-18
    • 2015-06-25
    • 2014-11-30
    • 2012-06-12
    相关资源
    最近更新 更多