我发现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,因为我需要能够提前取消监听器。
答案 0 :(得分: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