Ger*_*nes 4 javascript node.js eventemitter
我试图从一个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');
Run Code Online (Sandbox Code Playgroud)
我正在寻找以下是否可能以及我需要对以下代码进行哪些更改才能使其正常运行.或者是否存在跨多个发射器发射事件的另一种方式.谢谢你的时间.
问题是两者EventEmitter是分开的对象.
你打电话的时候:
var eventEmitterOne = new events.EventEmitter();
var eventEmitterTwo = new events.EventEmitter();
Run Code Online (Sandbox Code Playgroud)
您正在创建两个单独的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;
Run Code Online (Sandbox Code Playgroud)
只需将上面的代码放入一个名为的文件中EventFileName.js.它的使用非常简单.
var customEventEmitter = require('./EventFileName');
customEventEmitter.registerEvent('fireEvent', someCallback);
customEventEmitter.emitEvent('fireEvent');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2469 次 |
| 最近记录: |