Re: [whatwg/streams] add @@asyncIterator to ReadableStreamDefaultReader (#950)

TimothyGu commented on this pull request.



> +    <tr>
+      <th>Internal Slot</th>
+      <th>Description (<em>non-normative</em>)</th>
+    </tr>
+  </thead>
+  <tr>
+    <td>\[[Reader]]
+    <td class="non-normative">A {{ReadableStreamDefaultReader}} instance.
+  </tr>
+  <tr>
+    <td>\[[Cancel]]
+    <td class="non-normative">Boolean value indicating if the reader will be cancelled when the stream returns.
+  </tr>
+</table>
+
+<h5 id="default-reader-asynciterator-prototype-next" method for="ReadableStreamDefaultReaderAsyncIteratorPrototype">

This and `return()` should be `<h4>`'s.

> @@ -1402,6 +1405,87 @@ lt="ReadableStreamDefaultReader(stream)">new ReadableStreamDefaultReader(<var>st
   1. Perform ! ReadableStreamReaderGenericRelease(*this*).
 </emu-alg>
 
+<h5 id="default-reader-iterator" method for="ReadableStreamDefaultReader">
+  iterator({ cancel = true } = {})

There is no precedent for an `iterator` method anywhere in the platform and I'm reluctant to start that now. Just having `@@asyncIterator` is good enough IMO.

> +    <td>\[[Reader]]
+    <td class="non-normative">A {{ReadableStreamDefaultReader}} instance.
+  </tr>
+  <tr>
+    <td>\[[Cancel]]
+    <td class="non-normative">Boolean value indicating if the reader will be cancelled when the stream returns.
+  </tr>
+</table>
+
+<h5 id="default-reader-asynciterator-prototype-next" method for="ReadableStreamDefaultReaderAsyncIteratorPrototype">
+  next()
+</h5>
+
+<emu-alg>
+  1. Let _O_ be *this* value.
+  1. If Type(_O_) is not Object, throw a *TypeError* exception.

1. This needs to check if _O_ has a [[Reader]] internal slot. Otherwise _O_ might not be a ReadableStreamDefaultReaderAsyncIterator. It might be worthwhile to have an IsReadableStreamDefaultReaderAsyncIterator abstract operation.
2. This spec uses **this** rather "**this** value" (the ECMA-262 convention). So you could just do Type(**this**).

Ditto below for cancel.

> +    <td class="non-normative">A {{ReadableStreamDefaultReader}} instance.
+  </tr>
+  <tr>
+    <td>\[[Cancel]]
+    <td class="non-normative">Boolean value indicating if the reader will be cancelled when the stream returns.
+  </tr>
+</table>
+
+<h5 id="default-reader-asynciterator-prototype-next" method for="ReadableStreamDefaultReaderAsyncIteratorPrototype">
+  next()
+</h5>
+
+<emu-alg>
+  1. Let _O_ be *this* value.
+  1. If Type(_O_) is not Object, throw a *TypeError* exception.
+  1. Let _reader_ be O.[[Reader]].

Missing \_ for O.

> +  </tr>
+  <tr>
+    <td>\[[Cancel]]
+    <td class="non-normative">Boolean value indicating if the reader will be cancelled when the stream returns.
+  </tr>
+</table>
+
+<h5 id="default-reader-asynciterator-prototype-next" method for="ReadableStreamDefaultReaderAsyncIteratorPrototype">
+  next()
+</h5>
+
+<emu-alg>
+  1. Let _O_ be *this* value.
+  1. If Type(_O_) is not Object, throw a *TypeError* exception.
+  1. Let _reader_ be O.[[Reader]].
+  1. Let _read_ be ? GetMethod(_reader_, "read").

`"read"`

Ditto below for cancel.

> +  <tr>
+    <td>\[[Cancel]]
+    <td class="non-normative">Boolean value indicating if the reader will be cancelled when the stream returns.
+  </tr>
+</table>
+
+<h5 id="default-reader-asynciterator-prototype-next" method for="ReadableStreamDefaultReaderAsyncIteratorPrototype">
+  next()
+</h5>
+
+<emu-alg>
+  1. Let _O_ be *this* value.
+  1. If Type(_O_) is not Object, throw a *TypeError* exception.
+  1. Let _reader_ be O.[[Reader]].
+  1. Let _read_ be ? GetMethod(_reader_, "read").
+  1. Return ? Call(_read_, _reader_);

s/;/.

> +</emu-alg>
+
+<h5 id="default-reader-@@asynciterator" for="ReadableStreamDefaultReader">[@@asyncIterator]()</h5>
+
+<div class="note">
+  The <code>@@asyncIterator</code> method is an alias of {{ReadableStreamDefaultReader/iterator}}.
+</div>
+
+<emu-alg>
+  1. Let _iterator_ be ? GetMethod(*this*, "iterator").
+  1. Return ? Call(_iterator_, *this*).
+</emu-alg>
+
+<h3 id="default-reader-asynciterator-prototype" interface lt="ReadableStreamDefaultReaderAsyncIteratorPrototype">
+  ReadableStreamDefaultReaderAsyncIteratorPrototype
+</h3>

It should be written somewhere that this inherits from [%AsyncIteratorPrototype%](https://tc39.github.io/ecma262/#sec-asynciteratorprototype).

> @@ -1402,6 +1405,87 @@ lt="ReadableStreamDefaultReader(stream)">new ReadableStreamDefaultReader(<var>st
   1. Perform ! ReadableStreamReaderGenericRelease(*this*).
 </emu-alg>
 
+<h5 id="default-reader-iterator" method for="ReadableStreamDefaultReader">
+  iterator({ cancel = true } = {})
+</h5>
+
+<div class="note">
+  The <code>iterator</code> method returns an async iterator which can be used to consume the stream. The return method

The `return` method

> @@ -1402,6 +1405,87 @@ lt="ReadableStreamDefaultReader(stream)">new ReadableStreamDefaultReader(<var>st
   1. Perform ! ReadableStreamReaderGenericRelease(*this*).
 </emu-alg>
 
+<h5 id="default-reader-iterator" method for="ReadableStreamDefaultReader">
+  iterator({ cancel = true } = {})
+</h5>
+
+<div class="note">
+  The <code>iterator</code> method returns an async iterator which can be used to consume the stream. The return method
+  of this iterator will optionally release or cancel this reader.

1. this iterator object
2. Link [release](https://streams.spec.whatwg.org/#release-a-lock) and maybe [cancel](https://streams.spec.whatwg.org/#cancel-a-readable-stream) too?

-- 
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/pull/950#pullrequestreview-148119928

Received on Tuesday, 21 August 2018 15:48:40 UTC