【发布时间】: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