我使用两个不同的模块。(比如模块1和模块2.)这两个模块在接收数据时都会激发data
事件。
var mod1 = require('./module1');
var mod2 = require('./module2');
mod1.on(`data`, listener());
mod2.on(`data`, listener());
我希望能够调用公共侦听器,而不需要知道不同的模块。例如,您是否可以使用诸如接口或抽象类之类的东西来执行以下操作?
for (let step = 0; step < 10; step++) {
var mod = new ModFactory();
mod.on(`data`, commonListener())
}
这里有一个方法可以做到。
>
创建第三个可以调用的模块,类似于event-source
。让它导出一个EventEmitter
对象(单例)。
让mod1和mod2都使用event-source
模块,并将事件发送到event-source
创建eventEmitter。
然后让希望接收这些消息的其他代码也加载event-source
模块,并将侦听器放在其单例EventEmitter上。
这样,侦听代码就不需要知道事件来自何处的任何信息,它可以在一个eventEmitter对象上侦听所有事件。
这样,mod1
和mod2
总是将消息发送到同一eventEmitter,任何外部代码都可以检索并侦听该eventEmitter。更灵活一点的做法是重新构造mod1
和mod2
,以便将您希望它们发出的EventEmitter
传递给它们(在某种模块构造函数中)。然后,外部模块可以创建自己的eventEmitter,并在mod1
和mod2
加载时将其传递给它们。这将mod1
和mod2
两个模块保留为仍然独立的模块,并让调用方决定它们向哪个EventEmitter
对象发射。