Re: [whatwg/webidl] Add `async iterable<T>` type to WebIDL (PR #1397)

@MattiasBuelens requested changes on this pull request.

Looking pretty good!

> +Note: Instead of returning an async iterable from an IDL operation, the operation should return an
+[=interface=] that has an [=asynchronously iterable declaration=].
+
+<h5 id="js-async-iterable-iteration">Iterating async iterables</h5>
+
+<div algorithm>
+
+    To <dfn id="async-iterable-get-next-value" export lt="get an async iterable next value">get the next value</dfn> of an
+    <code><a lt="async iterable type">async iterable&lt;<var>T</var>&gt;</a></code> |iteratorRecord|,
+    perform the following steps:
+
+    1.  Let |nextResult| be the result of calling <a abstract-op>IteratorNext</a>(|iteratorRecord|).
+    1.  If |nextResult| is an abrupt completion, return [=a promise rejected with=]
+        |nextResult|.\[[Value]].
+    1.  Let |nextPromise| be [=a promise resolved with=] |nextResult|.\[[Value]].
+    1.  Return the result of [=reacting=] to |nextPromise| with with the following fulfillment

```suggestion
    1.  Return the result of [=reacting=] to |nextPromise| with the following fulfillment
```

> +
+</div>
+
+<div algorithm>
+
+    To <dfn id="async-iterable-finish-iterating" export lt="finish iterating an async iterable">finish iterating</dfn> an
+    <code><a lt="async iterable type">async iterable&lt;<var ignore>T</var>&gt;</a></code> |iteratorRecord|,
+    perform the following steps:
+
+    1.  Let |iterator| be |iteratorRecord|.\[[Iterator]].
+    1.  Let |returnMethod| be <a abstract-op>GetMethod</a>(|iterator|, "return").
+    1.  If |returnMethod| is an abrupt completion, return [=a promise rejected with=]
+        |returnMethod|.\[[Value]].
+    1.  If |returnMethod| is <emu-val>undefined</emu-val>, return [=a promise resolved with=]
+        <emu-val>undefined</emu-val>.
+    1.  Let |returnResult| be <a abstract-op>Call</a>(|returnMethod|.\[[Value]], |iterator|).

For [`ReadableStream.from(asyncIterable)`](https://streams.spec.whatwg.org/#readable-stream-from-iterable), we need a way to pass an optional `reason` to the `return()` call.

I propose we add an optional `value` argument to "finish iterating an async iterable".

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/webidl/pull/1397#pullrequestreview-1959823649
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/webidl/pull/1397/review/1959823649@github.com>

Received on Tuesday, 26 March 2024 09:48:15 UTC