【问题标题】:Calling the event emitter before the event handler in nodejs在nodejs中的事件处理程序之前调用事件发射器
【发布时间】:2019-08-11 08:11:57
【问题描述】:

我正在经历this code,我看到在定义事件处理程序之前调用了nodejs事件发射器(this linethis line)。

当我尝试复制相同的内容时,没有任何事件得到处理。

    eventEmitter.emit('event');

    eventEmitter.on('event', () => {
        console.log('event handled');
    });

当你把事件发射器放在事件处理程序之后 '事件处理' 被记录下来。

the code on GitHub 错了吗?或者它仍然可以工作,因为它在一个模块中并且有一种导入模块的方式允许它工作?请解释。谢谢。

【问题讨论】:

    标签: javascript node.js events event-handling eventemitter


    【解决方案1】:

    第 44 行的事件发射位于绑定到 ioChat 的“连接”事件的处理程序内部,该事件在第 181 行绑定 eventEmitter 的“get-all-users”事件之前未调用。所以即使行事件先调用,不会先调用。

    例子:

    eventEmitter.on('connection', () => {
      console.log('this should log second');
      eventEmitter.emit('someEvent');
    });
    
    eventEmitter.on('someEvent', () => {
      console.log('this should log third');
    });
    
    console.log('this should log first');
    eventEmitter.emit('connection');
    

    【讨论】:

    • 所以您的意思是,当您导入在第 18 行导出的模块时,处理程序首先“注册”,然后客户端才能调用任何连接?
    • 差不多。导入模块时不会发生注册,而是调用导出的函数时发生。
    • 我想我现在明白了。如果我错了,请纠正我:在调用 ioChat 的“连接”事件之前,Nodejs 已经在第 181 行“看到”了事件处理程序?
    • 您好,请查看this question。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多