我认为mongodb 更改流扩展了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 因为我需要能够尽早取消侦听器。