0

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

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

有没有一种方法可以在不引用可读流的情况下取消流。

解决这个问题的通常方法当然是

  readable.unpipe(writeable);

但是在这种情况下,我不再有权访问可读对象,只能访问可写对象。我想做一些类似的事情

  writeable.disconnectAllStreams()

我需要这样做的原因是,在某些时候我不再需要可写对象,我需要将其从流中断开。我可以丢弃所有引用以便对其进行垃圾收集,但如果不取消管道,流将很高兴地继续永远消耗内存(流永远不会结束),并且由于流仍然保留引用,因此对象将永远不会被垃圾收集。

4

1 回答 1

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);
于 2018-06-09T23:43:09.927 回答