我试图从一个EventEmitter发送到另一个EventEmitter,或者找到另一个解决方案。下面的代码不起作用。
多发射器示例
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');我希望找出以下内容是否可行,以及我需要对下面的代码进行哪些更改才能使其正常运行。或者是否有另一种方法可以跨多个发射器发射事件。耽误您时间,实在对不起。
发布于 2013-07-12 18:14:31
问题是这两个EventEmitter是独立的对象。
当你打电话:
var eventEmitterOne = new events.EventEmitter();
var eventEmitterTwo = new events.EventEmitter();您正在创建两个独立的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');发布于 2017-07-05 02:08:18
另一个答案不能发出带有参数的事件。以下是改进之处:
'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;https://stackoverflow.com/questions/17621285
复制相似问题