是否可以在没有引用流的情况下取消对象的管道

时间:2018-06-09 21:16:22

标签: javascript node.js node-streams

我有一个ReadableStream和一个WriteableStream。在实例化两个对象之后,我将可读流传输到可写流中。

+=

是否有办法在不引用可读流的情况下取消管道流。

通常的方法是

  const readable = getReadableStreamSomehow();
  const writeable = new WriteableStreamObject();
  readable.pipe(writeable);

但是在这种情况下,我不再能够访问可读对象,只能访问可写对象。我想按照

的方式做点什么
  readable.unpipe(writeable);

我需要这样做的原因是,在某些时候我不再需要可写入,我需要将它从流中断开。我可以丢弃所有引用,以便它被垃圾收集,但没有删除流将很乐意继续消耗内存(流永远不会结束),因为流仍然保留引用,该对象永远不会被垃圾收集。

1 个答案:

答案 0 :(得分:2)

一个可写的人真的不知道有什么东西是用它来管道的。它只知道有些东西经常写入它。它是可读的,可以跟踪它传送到的一个或多个其他流。因此,没有内置的方法:

writeable.disconnectAllStreams()

因为可写的实际上并不知道是谁用它来管道。

您可以将可读流作为参考放在可写的:

const readable = getReadableStreamSomehow();
const writeable = new WriteableStreamObject();

// store readable on the writable so we can unpipe it later
writable.pipeStream = readable;

// set the pipe
readable.pipe(writeable);

然后,你可以做:

// get the readable and unpipe it
writable.pipeStream.unpipe(writable);