流被销毁后,流监听器是否会自动删除

时间:2019-08-28 20:50:43

标签: javascript node.js stream listener

我不确定在销毁流时是否应该清理节点中流上的侦听器-似乎应该自动完成

2 个答案:

答案 0 :(得分:0)

不,不是。如果您在节点js中销毁流,则回调仍将链接到流对象。

尝试执行此操作,然后查看控制台:

const Readable = require("stream").Readable;
const s = new Readable();

s.onClose = () => console.log;
s.onPipeEnd = () => console.log;
s.destroy();

console.log(String(s.onClose));
console.log(String(s.onPipeEnd));

答案 1 :(得分:0)

  

我不确定在销毁流时是否应该清理节点中流上的侦听器

您不需要清理完成的流上的侦听器。一旦流完成并且超出范围,或者您清除了对该流的任何引用,则它将有资格进行垃圾回收,因为将不再有任何代码可以到达该流对象,并且将不会有任何未完成的异步操作。可能触发更多事件的操作。

重要的是要了解,您的听众不会阻止对象被垃圾回收。因此,您无需清理它们即可使对象有资格进行垃圾收集。垃圾收集仅涉及仍可以到达对象的活动代码(计时器,异步操作或直接引用对象的代码)。

因此,在没有对流的有效引用的情况下,完成的流对象和您的侦听器将全部被垃圾回收(并因此由系统自动清除)。您无需手动清理它们。