【问题标题】:Event listener and event emitter separate files事件监听器和事件发射器分开文件
【发布时间】:2019-05-20 15:21:57
【问题描述】:

我有三个文件:

my_emitter.js:要共享的 EventEmitter 对象的实例(我们将其称为“myEmitter”)

listener.js:myEmitter.on() 被调用的地方

registration_handler.js:在哪里调用 myEmitter.emit()


监听器没有接收到发出的事件。

使用以下代码,我首先运行node listener.js,然后运行node registration_handler.js

my_emitter.js

const EventEmitter = require('events');
const myEmitter = new EventEmitter();
exports.emitter = myEmitter;

listener.js

const emitterFile = require('./my_emitter');
const myEmitter = emitterFile.emitter;

myEmitter.on('test', (res) => {
    console.log('worked!');
});

//within 5s, let's run registration_handler.js to emit the event
setTimeout(console.log, 5000, 'Done');

registration_handler.js

const emitterFile = require('./my_emitter');
const myEmitter = emitterFile.emitter;

myEmitter.emit('test');

控制台(来自 listener.js):

预期

$ node listener.js
worked!
Done

实际

$ node listener.js
Done

【问题讨论】:

  • 您正在运行 2 个不同的节点进程(无论它们使用什么文件),所以您不会得到 the expected。有消息队列来处理你(我猜)试图实现的目标
  • @1556089774 我明白了。是因为每个节点进程都在创建一个唯一的EventEmitter() 实例吗?谢谢!
  • 每个node 进程都有自己的私有内存,所以是的

标签: node.js events event-handling dom-events


【解决方案1】:

为了让它工作,你必须在同一个 Node.js 进程中运行它们,为此,你可以创建一个新文件并从那里要求你的监听器和发射器。

// another-file.js

require('./listener');
require('./registration_handler.js');

运行这个新文件应该会给你预期的结果:

$ node another-file.js
worked!
Done

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2020-05-06
    • 2020-11-29
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多