节点EventEmitter到EventEmitter发出。 多个发射器

我试图从一个EventEmitter发射到另一个EventEmitter,或者find一个替代解决scheme。 下面的代码不起作用。

多发射器的例子

var events = require('events'); var eventEmitterOne = new events.EventEmitter(); var eventEmitterTwo = new events.EventEmitter(); eventEmitterTwo.on('fireEvent', function() { console.log('event fired'); }); eventEmitterOne.emit('fireEvent'); 

我正在寻找如果以下是可能的,以及我需要对下面的代码做出什么改变,使其function。 还是有另一种方式发射事件跨多个发射器。 谢谢你的时间。

问题是两个EventEmitter是独立的对象。

你打电话时:

 var eventEmitterOne = new events.EventEmitter(); var eventEmitterTwo = new events.EventEmitter(); 

您正在创build两个单独的EventEmitter对象。 这意味着当你发射事件到一个事件时,你不能通过触发另一个事件触发事件。

你的代码没有什么错,只是你对应该发生什么的理解。

我喜欢这样做的方式是将事情包装在我自己的EventEmitter模块中。 这样我有一个“全局”的发射器对象,用一些简单的函数包装来发射和注册事件。 这允许许多不同的模块共享相同的一组事件,为其他模块注册事件以启动,等等。

 var eventEmitter = new (require('events').EventEmitter)(); function emitEvent(str) { 'use strict'; eventEmitter.emit(str); } function registerEvent(str, callback) { 'use strict'; eventEmitter.on(str, callback); } function registerEventOnce(str, callback) { 'use strict'; eventEmitter.once(str, callback); } exports.emitEvent = emitEvent; exports.registerEvent = registerEvent; exports.registerEventOnce = registerEventOnce; 

只要将上面的代码放到名为EventFileName.js的文件中。 它的使用非常简单。

 var customEventEmitter = require('./EventFileName'); customEventEmitter.registerEvent('fireEvent', someCallback); customEventEmitter.emitEvent('fireEvent'); 

另一个答案不能用参数发出事件。 所以这里是改进:

 'use strict'; var eventEmitter = new (require('events').EventEmitter)(); function emitEvent(...args) { eventEmitter.emit(...args); } function registerEvent(str, callback) { eventEmitter.on(str, callback); } function registerEventOnce(str, callback) { eventEmitter.once(str, callback); } exports.emit = emitEvent; exports.on = registerEvent; exports.once = registerEventOnce;