我有一个关于使用Node的EventEmitter的项目的问题。请考虑以下代码。
let _events = new EventEmitter();
_events.on('test', () => { console.log('Fired foo'); });
_events.on('test', () => { console.log('Fired bar'); });
_events.emit('test');
test
现在附加了两个侦听器。是否可以添加第三个选择性地触发一个或另一个或两者?每次发出test
时,都会触发两个侦听器。
_events.on('test', () => {
if (a !== b) {
// prevent other listeners from triggering
}
});
给它更多的背景。在我的项目中,我在视频播放器上为ClickThrough
事件添加了一个监听器。视频播放器本身也附有自己的听众。我们都使用相同的EventEmitter
对象,因此我的监听器与其监听器位于同一个数组中。但我希望我的监听器首先触发,如果满足条件,则继续触发另一个连接的监听器,如果不阻止它们被触发。
现在我只看到一个缓存侦听器的'粗略'方法,并用一个处理触发器的方法替换它们。
let _listeners = _events.listeners('test');
_events.on('test', () => {
if (a !== b) {
// prevent other listeners from triggering
} else {
_listeners.forEach((fn) => {
fn.call(this);
});
}
});
但这对我来说似乎不是一个优雅的解决方案。还有其他办法吗?