Re: [whatwg/streams] Introspection: disturbed or locked (#1105)

Hmm, good point. I don't see why you shouldn't be allowed to construct a `Response` from a partially-read or cancelled `ReadableStream`. 🤔

For example, it's already possible to create a non-disturbed `ReadableStream` from a disturbed one, thus bypassing this restriction:
```javascript
let rs1 = new ReadableStream({
  start(c) {
    c.enqueue(new Uint8Array([1, 2, 3]));
    c.enqueue(new Uint8Array([4, 5, 6]));
    c.enqueue(new Uint8Array([7, 8, 9]));
    c.close();
  }
});

// Disturb the stream
let reader1 = rs1.getReader();
await reader1.read(); // { done: false, value: Uint8Array([1, 2, 3]) }
reader1.releaseLock();
new Response(rs1); // throws TypeError: "Response body object should not be disturbed or locked"

// Create a "fresh" stream that continues from rs1
let rs2 = rs1.pipeThrough(new TransformStream());
// or: let [rs2, rs3] = rs1.tee(); rs3.cancel();
let resp = new Response(rs2); // works
await resp.arrayBuffer(); // ArrayBuffer([4, 5, 6, 7, 8, 9])
```
Once we have `ReadableStream.from()`, this will become even easier:
```javascript
new Response(rs1) // throws
new Response(ReadableStream.from(rs1)) // ok
```

Does anyone have any idea why we have this restriction? 🤷‍♂️

-- 
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/1105#issuecomment-771523711

Received on Tuesday, 2 February 2021 10:08:54 UTC