【问题标题】:unable to remove listener from mongodb change stream 'change' event无法从 mongodb 更改流“更改”事件中删除侦听器
【发布时间】:2019-03-26 15:57:45
【问题描述】:

我认为 mongodb change stream 扩展了 EventEmitter 类,因此我尝试使用 removeListener 函数删除我安装的事件。 在更改流上调用 removeListener 后,它仍然会在更改时触发。可能是我在删除时使用了错误的函数引用,但我看不到如何。

我发现 removeAllListeners 确实删除了附加的侦听器。但我需要控制要删除的侦听器。

const change_listener = (change) => {
    console.log(change_stream.listenerCount("change"))
    change_stream.removeListener("change", change_listener)
    console.log(change_stream.listenerCount("change"))
}
change_stream.on("change", change => change_listener(change))

应该输出 1 0

但它输出 1 1

听者继续听。

使用 .once 而不是 .on 只能起到一半的作用。我仍然需要 removeListener 因为我需要能够提前取消监听器。

【问题讨论】:

  • 你能用.once代替.on吗?
  • 我需要能够取消监听器以防万一。不过感谢您的提示!很高兴知道这也是可能的
  • 如果您查看EventEmitter 的文档,就在removeAllListeners 正下方,您可以在其中指定事件和函数。
  • 好吧,如果你的意思是 removeListener,那就是我在这里描述的那个没有像我期望的那样工作。

标签: node.js mongodb eventemitter changestream


【解决方案1】:

问题是由于您要删除的功能。

这应该可行:

const change_listener = (change) => {
    console.log(change_stream.listenerCount("change"))
    change_stream.removeListener("change", change_listener)
    console.log(change_stream.listenerCount("change"))
}
change_stream.on("change", change_listener)

注意change => change_listener(change)是一个函数,它不同于change_listener

【讨论】:

  • 这当然是问题所在,与 mongo 更改流无关...非常感谢您的帮助和仔细查看!
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
相关资源
最近更新 更多