Javascript 如何防止触发特定的侦听器
我有一个关于使用节点的EventEmitter的项目的问题。考虑下面的代码。Javascript 如何防止触发特定的侦听器,javascript,listeners,eventemitter,Javascript,Listeners,Eventemitter,我有一个关于使用节点的EventEmitter的项目的问题。考虑下面的代码。 let _events = new EventEmitter(); _events.on('test', () => { console.log('Fired foo'); }); _events.on('test', () => { console.log('Fired bar'); }); _events.emit('test'); test现在有两个侦听器连接到它。是否可以添加第三个选项,有选择地
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
}
});
给它更多的上下文。在我的项目中,我在视频播放器上的点击事件中添加了一个侦听器。视频播放器本身也附带了自己的监听器。我们都使用相同的EventEmitter
对象,因此我的侦听器与他们的侦听器位于同一数组中。但我希望我的侦听器首先触发,如果条件满足,则继续触发另一个连接的侦听器,如果条件不满足,则阻止它们触发
现在我只看到一种“粗糙”的方法,它缓存侦听器并用一个处理触发的方法替换它们
let _listeners = _events.listeners('test');
_events.on('test', () => {
if (a !== b) {
// prevent other listeners from triggering
} else {
_listeners.forEach((fn) => {
fn.call(this);
});
}
});
但在我看来,这似乎不是一个优雅的解决方案。还有其他方法吗?你的粗略方法可能是最好的方法。否则,你在听一个事件,做两件不同的事情。如果你需要一个不同的动作,你应该触发一个不同的事件。你粗糙的方法可能是最好的方法。否则,你在听一个事件,做两件不同的事情。如果你需要一个不同的动作,你应该触发一个不同的事件。