admin管理员组文章数量:1359202
I am trying to emit from one EventEmitter to another EventEmitter, or find an alternative solution. The code below doesn't function.
Multiple emitter example
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');
I'm looking to find out if the following is possible and whats changes I would need to make to the following code to make it functional. Or is there another way of emitting events across multiple emitters. Thanks for your time.
I am trying to emit from one EventEmitter to another EventEmitter, or find an alternative solution. The code below doesn't function.
Multiple emitter example
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');
I'm looking to find out if the following is possible and whats changes I would need to make to the following code to make it functional. Or is there another way of emitting events across multiple emitters. Thanks for your time.
Share Improve this question asked Jul 12, 2013 at 18:04 Gerard DownesGerard Downes 64311 silver badges25 bronze badges 1-
2
EventEmitters are independent from each other. They can have multiple listeners on the same event, but each emitter will emit its events only to its listeners, not to other emitters. However, you can add listeners automatically to multiple emitters by listening to the
newListener
event. – Zeta Commented Jul 12, 2013 at 18:08
2 Answers
Reset to default 8The issue is that the two EventEmitter
s are separate objects.
When you call:
var eventEmitterOne = new events.EventEmitter();
var eventEmitterTwo = new events.EventEmitter();
You’re creating two separate EventEmitter
objects. This means that when you emit events to one, you cannot trigger them by firing events on the other.
There’s nothing wrong with your code, just your understanding of what should be happening.
The way I like to do this is by wrapping things in my own EventEmitter
module. This way I have a "global" emitter object, with some simple function wrappers for emitting and registering events. This allows many different modules to share the same set of events, register events for other modules to fire, and so on.
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;
Just throw the above code into a file called EventFileName.js
. And its use is very simple.
var customEventEmitter = require('./EventFileName');
customEventEmitter.registerEvent('fireEvent', someCallback);
customEventEmitter.emitEvent('fireEvent');
The other answer cannot emit event with arguments. So here is the improvement:
'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;
本文标签: javascriptNode EventEmitter to EventEmitter emits Multiple emittersStack Overflow
版权声明:本文标题:javascript - Node EventEmitter to EventEmitter emits. Multiple emitters - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744067280a2585236.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论