Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法从mongodb更改流“更改”事件中删除侦听器_Node.js_Mongodb_Eventemitter_Changestream - Fatal编程技术网

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

Node.js 无法从mongodb更改流“更改”事件中删除侦听器,node.js,mongodb,eventemitter,changestream,Node.js,Mongodb,Eventemitter,Changestream,我认为该函数扩展了该类,所以我尝试使用RemovelListener函数删除我安装的事件。 在更改流上调用removeListener后,它仍然会在更改时激发。可能我只是在删除时使用了错误的函数引用,但我看不出是怎么回事 我发现removeAllListeners确实删除了附加的侦听器。但我需要控制要删除的侦听器 const change_listener = (change) => { console.log(change_stream.listenerCount("change

我认为该函数扩展了该类,所以我尝试使用RemovelListener函数删除我安装的事件。 在更改流上调用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. 一,

听者继续听下去


使用.once而不是.on只能起到一半的作用。我仍然需要removeListener,因为我需要能够提前取消侦听器。

问题是由于您要删除的函数

这应该起作用:

const change_listener=change=>{ console.logchange\u stream.listenerCountchange change\u stream.removeListenerchange,change\u listener console.logchange\u stream.listenerCountchange } change\u stream.onchange,change\u listener
请注意,change=>change\u listener change是一个函数,它与change\u listener不同,您是否可以使用它。once而不是.on?我需要能够取消侦听器以备不时之需。谢谢你的提示!很高兴知道这也是可能的如果你看一下removeAllListeners下面的EventEmitter文档,你可以在另外一个函数中指定事件和函数。如果你是指removeListener,这就是我在这里描述的一个,它并没有像我期望的那样工作。这当然就是问题所在,与mongo change streams无关。。。非常感谢您的帮助和密切关注!