我有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时,事件立即退出执行,我该如何在订阅者实际收听发布者的情况下进行此项工作
答案 0 :(得分: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 。这将在同一过程中同时运行发布者和订阅者。