如何防止触发特定的侦听器

时间:2016-08-25 14:07:37

标签: javascript listeners eventemitter

我有一个关于使用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);
        });
    }
 });

但这对我来说似乎不是一个优雅的解决方案。还有其他办法吗?

0 个答案:

没有答案