如何删除所有侦听任何事件的事件侦听器?
我已经尝试了removeAllListeners()
,但它无法正常工作。我错过了什么吗?
const ee = new EventEmitter2()
ee.onAny(() => console.log('hello was fired'))
setInterval(() => ee.emit('hello'), 500)
setTimeout(() => {
ee.removeAllListeners()
console.log('removed all listeners')
}, 1500)

<script src="https://cdn.jsdelivr.net/npm/eventemitter2@5.0.1/lib/eventemitter2.min.js"></script>
&#13;
答案 0 :(得分:1)
似乎这个库的API有些令人困惑。要取消注册onAny()
个侦听器,请使用offAny()
。
深入了解源代码会发现removeAllListeners()
并未触及跟踪任何事件的侦听器的_all
数组。它只会在侦听器上再次运行init()
和configure()
,但没有一个触及_all
数组。
另请注意您在GitHub页面上的问题:removeAllListeners does not remove listeners added with onAny #235
如果您想要实际删除它们,请执行以下操作:
const ee = new EventEmitter2();
ee.onAny(() => console.log("any event was fired"));
ee.on("hello", () => console.log("hello event was fired"));
setInterval(() => ee.emit("hello"), 500);
setTimeout(() => {
console.log("Removing any listener");
ee.offAny();
}, 1500);
setTimeout(() => {
console.log("Removing all listeners");
ee.removeAllListeners();
}, 3000);
<script src="https://cdn.jsdelivr.net/npm/eventemitter2@5.0.1/lib/eventemitter2.min.js"></script>