首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点EventEmitter到EventEmitter发射。多辐射源

节点EventEmitter到EventEmitter发射。多辐射源
EN

Stack Overflow用户
提问于 2013-07-12 18:04:46
回答 2查看 4K关注 0票数 4

我试图从一个EventEmitter发送到另一个EventEmitter,或者找到另一个解决方案。下面的代码不起作用。

多发射器示例

代码语言:javascript
复制
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');

我希望找出以下内容是否可行,以及我需要对下面的代码进行哪些更改才能使其正常运行。或者是否有另一种方法可以跨多个发射器发射事件。耽误您时间,实在对不起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-12 18:14:31

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

当你打电话:

代码语言:javascript
复制
var eventEmitterOne = new events.EventEmitter();
var eventEmitterTwo = new events.EventEmitter();

您正在创建两个独立的EventEmitter对象。这意味着当您向一个事件发出事件时,不能通过在另一个事件上触发事件来触发它们。

你的代码没有什么问题,只是你对应该发生的事情的理解。

我喜欢这样做的方式是在我自己的EventEmitter模块中包装东西。这样,我就有了一个“全局”发射器对象,带有一些简单的函数包装器,用于发射和注册事件。这允许许多不同的模块共享相同的事件集,为其他要触发的模块注册事件,等等。

代码语言:javascript
复制
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的文件中即可。而且它的使用非常简单。

代码语言:javascript
复制
var customEventEmitter = require('./EventFileName');
customEventEmitter.registerEvent('fireEvent', someCallback);
customEventEmitter.emitEvent('fireEvent');
票数 7
EN

Stack Overflow用户

发布于 2017-07-05 02:08:18

另一个答案不能发出带有参数的事件。以下是改进之处:

代码语言:javascript
复制
'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;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17621285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档