- From: Mattias Buelens <notifications@github.com>
- Date: Mon, 08 Jun 2020 16:25:43 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1038@github.com>
When teeing a stream, if one branch is cancelled while the other branch is read until the end, then the cancel promise of the first branch never resolves. ## Reproduction case ```javascript const readable = new ReadableStream({ start(controller) { for (let chunk of ["a", "b", "c"]) { controller.enqueue(chunk); } controller.close(); } }); const [leftStream, rightStream] = readable.tee(); (async () => { const reader = leftStream.getReader(); // Cancel the left branch immediately. console.log("left cancel start"); let cancelPromise = reader.cancel(); // The left branch never finishes cancelling. let cancelResult = await cancelPromise; console.log("left cancel done", cancelResult); // never reached })(); (async () => { const reader = rightStream.getReader(); // Read all chunks from the right branch. while (true) { const {value, done} = await reader.read(); console.log("right read:", {value, done}); if (done) break; } // The right branch has read all the chunks. let closedResult = await reader.closed; console.log("right closed", closedResult); })(); ``` ## Expected results The left branch should finish cancelling once all chunks have been read from the original stream (as a result of the right branch pulling them). ## Actual results The left branch never finishes cancelling. ## Investigation Currently, [the specification for ReadableStreamTee](https://streams.spec.whatwg.org/#readable-stream-tee) only resolves *cancelPromise* when **both** branches are cancelled. However, I believe this needs to happen when either both branches are cancelled, **or** when the last chunk has been pulled (i.e. during the "If done is true" step of *pullAlgorithm*). -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1038
Received on Monday, 8 June 2020 23:25:56 UTC