- From: Simon Chan <notifications@github.com>
- Date: Fri, 10 Jun 2022 21:27:55 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1217/1152852831@github.com>
If we are talking about API design (which means the consumer needs to explicitly release the buffer), I think it's already possible like this: ```ts declare function pullFromSource<T>(): Promise<T>; declare function releaseToSource<T>(value: T): void; interface ReusableData<T> { value: T; release: () => void; } class ReusableReadableStream<T> extends ReadableStream<ReusableData<T>>{ constructor() { super({ async pull(controller) { const value = await pullFromSource<T>(); controller.enqueue({ value, release: () => { releaseToSource(value); } }); } }) } } const stream = new ReusableReadableStream<Uint8Array>(); stream.pipeTo(new WritableStream({ write(chunk) { // do things to chunk console.log(chunk.value); chunk.release(); } })) ``` The consumer needs to use `chunk.value`, so it knows it's special, and remembers to call `release()`. If we don't want the consumer to learn new things, is it possible to let GC release the buffer? -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1217#issuecomment-1152852831 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/streams/issues/1217/1152852831@github.com>
Received on Saturday, 11 June 2022 04:28:06 UTC