代码之家  ›  专栏  ›  技术社区  ›  nicholaswmin

node.js eventmemitter2;如何删除添加了onany的侦听器

  •  0
  • nicholaswmin  · 技术社区  · 7 年前

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

    我试过了 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>
    1 回复  |  直到 7 年前
        1
  •  1
  •   zero298    7 年前

    似乎这个库的API有些混乱。注销 onAny() 听众,你用 offAny() .

    深入到源头可以发现 removeAllListeners() 没有真正接触到 _all 跟踪任何事件的侦听器的数组。它只是在跑 init() configure() 在听众身上,没有一个能触及到 _全部 数组。

    还请注意您在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>