-1

我认为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 因为我需要能够尽早取消侦听器。

4

1 回答 1

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

于 2019-03-26T21:47:05.323 回答