无法从mongodb更改流“更改”事件中删除侦听器

时间:2019-03-26 15:57:46

标签: node.js mongodb eventemitter changestream

我发现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,因为我需要能够提前取消监听器。

1 个答案:

答案 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