Событие EventEmitter не получено

у меня 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 в отдельном окне, он немедленно прекращает выполнение, как мне заставить это работать, когда подписчик действительно слушает издателя


person PirateApp    schedule 22.04.2019    source источник
comment
Что именно вы подразумеваете под «отдельным окном»? Вы имеете в виду совсем другой процесс nodeJS? Если это так, то EventEmitter не решит вашу проблему, поскольку события EventEmitter существуют в рамках одного процесса node. См. этот ответ здесь для возможного ответа, если я правильно понял ваш вопрос .   -  person MrfksIV    schedule 22.04.2019


Ответы (1)


Проблема в том, что вы пытаетесь публиковать события в одном процессе и прослушивать их в отдельном процессе. Основной API Events не предназначен для такого рода межпроцессного взаимодействия.

Лучше всего настроить ваш пример, изменив a.js на:

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

const myEmitter = new EventEmitter();

module.exports = myEmitter;

А затем запустите a.js в одиночку. Это запустит и издателя, и подписчика в одном и том же процессе.

person Andrew Yochum    schedule 22.04.2019