【问题标题】:EventEmitter event not received未收到 EventEmitter 事件
【发布时间】:2019-09-11 16:34:18
【问题描述】:

我有 3 个文件

a.js 共享 EventEmitter 模块

const EventEmitter = require('events');

const myEmitter = new EventEmitter();

module.exports = myEmitter;

b.js 发布者

const myEmitter = require('./a');

// Perform the registration steps

let user = 1;

setInterval(() => {
    myEmitter.emit('user-registered', user);    
    user++;
}, 1000);

// Pass the new user object as the message passed through by this event.

c.js 订阅者

const myEmitter = require('./a');

myEmitter.on('user-registered', (user) => {
  // Send an email or whatever.
  console.log(user);

});

当我运行 b.js 或发布者时,事件会不断发布,但是当我在单独的窗口中运行 c.js 时,它会立即退出执行,如何在订阅者实际监听发布者的情况下使其工作

【问题讨论】:

  • “一个单独的窗口”到底是什么意思?你的意思是完全不同的nodeJS进程吗?如果是这种情况,那么 EventEmitter 将无法解决您的问题,因为 EventEmitter 事件存在于单个节点进程中。如果我正确理解您的问题,请参阅此答案here 以获得可能的答案。

标签: node.js events eventemitter


【解决方案1】:

您遇到的麻烦是您试图在一个进程中发布事件,并在另一个进程中监听它们。核心事件 API 不适用于这种进程间通信。

调整您的示例以使其工作最好将 a.js 更改为:

const EventEmitter = require('events');
const publisher = require('./b');
const subscriber = require('./c');

const myEmitter = new EventEmitter();

module.exports = myEmitter;

然后单独运行a.js。这将在同一进程中同时运行发布者和订阅者。

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多