无法从 mongodb 更改流 'change' 事件中删除侦听器
unable to remove listener from mongodb change stream 'change' event
我想出了 mongodb change stream extends the EventEmitter class,所以我尝试使用 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,因为我需要能够提前取消侦听器。
问题出在您要删除的函数上。
这应该有效:
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
我想出了 mongodb change stream extends the EventEmitter class,所以我尝试使用 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,因为我需要能够提前取消侦听器。
问题出在您要删除的函数上。
这应该有效:
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