gpt4 book ai didi

javascript - Node EventEmitter 到 EventEmitter 发出。多个发射器

转载 作者:搜寻专家 更新时间:2023-10-31 23:10:00 25 4
gpt4 key购买 nike

我正在尝试从一个 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');

我正在寻找以下是否可行以及我需要对以下代码进行哪些更改才能使其正常运行。或者是否有另一种跨多个发射器发射事件的方法。感谢您的宝贵时间。

最佳答案

问题是两个 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');

关于javascript - Node EventEmitter 到 EventEmitter 发出。多个发射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17621285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com