Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止触发特定的侦听器_Javascript_Listeners_Eventemitter - Fatal编程技术网

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

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现在有两个侦听器连接到它。是否可以添加第三个选项,有选择地

我有一个关于使用节点的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
    }
 });
给它更多的上下文。在我的项目中,我在视频播放器上的
点击事件中添加了一个侦听器。视频播放器本身也附带了自己的监听器。我们都使用相同的
EventEmitter
对象,因此我的侦听器与他们的侦听器位于同一数组中。但我希望我的侦听器首先触发,如果条件满足,则继续触发另一个连接的侦听器,如果条件不满足,则阻止它们触发

现在我只看到一种“粗糙”的方法,它缓存侦听器并用一个处理触发的方法替换它们

let _listeners = _events.listeners('test');

_events.on('test', () => { 
    if (a !== b) {
        // prevent other listeners from triggering
    } else {
        _listeners.forEach((fn) => {
            fn.call(this);
        });
    }
 });

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

你的粗略方法可能是最好的方法。否则,你在听一个事件,做两件不同的事情。如果你需要一个不同的动作,你应该触发一个不同的事件。你粗糙的方法可能是最好的方法。否则,你在听一个事件,做两件不同的事情。如果你需要一个不同的动作,你应该触发一个不同的事件。