问题是这两个EventEmitter
s 是单独的对象。
你打电话时:
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');