[whatwg/webidl] `ReadableStream.return(Promise)` inconsistent with async generator behavior (Issue #1522)

HansBrende created an issue (whatwg/webidl#1522)

### What is the issue with the Web IDL Standard?

For background, see the discussion here: https://gist.github.com/MattiasBuelens/496fc1d37adb50a733edd43853f2f60e

In short, I noticed while trying to drop a polyfill for ReadableStream's async iteration into Typescript that the types weren't matching up with `AsyncIterator`. In short, the `return` method for async generators can accept a promise, rather than a plain value, which is awaited and unwrapped into the return value like so: `{done: true, value: resultOfAwaitedPromise}`. Whereas, the async iterator corresponding to the webidl spec seems to not do this, instead returning `{done: true, value: unawaitedPromise}`.

To illustrate the discrepancy:

```typescript
let gen = (async function*() {})();
await gen.return(Promise.resolve('foo'));
// -> { done: true, value: 'foo' }

let rs = new ReadableStream();
let it = rs.values();
await it.return(Promise.resolve('foo'));
// -> { done: true, value: Promise {<fulfilled>: 'foo'} }
```

So I am curious if this is an oversight somewhere or intentional for some reason?

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/webidl/issues/1522
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/webidl/issues/1522@github.com>

Received on Friday, 5 September 2025 18:43:19 UTC