Node.js EventEmitter2;如何删除添加了onAny的侦听器

时间:2018-06-15 13:42:12

标签: javascript eventemitter

如何删除所有侦听任何事件的事件侦听器?

我已经尝试了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;
&#13;
&#13;

1 个答案:

答案 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>