- From: Domenic Denicola <notifications@github.com>
- Date: Fri, 07 Sep 2018 12:02:07 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/pull/954/review/153464052@github.com>
domenic commented on this pull request. > @@ -866,6 +868,84 @@ option. If <code><a for="underlying source">type</a></code> is set to <code>unde </code></pre> </div> +<!-- Bikeshed doesn't let us mark this up correctly: https://github.com/tabatkins/bikeshed/issues/1344 --> +<h5 id="rs-asynciterator" for="ReadableStream">[@@asyncIterator]({ <var>preventCancel</var> = false } = {})</h5> + +<div class="note"> + The <code>@@asyncIterator</code> method creates a <a>default reader</a> and <a lt="locked to a reader">locks</a> the + stream to the new reader. While the stream is locked, no other reader can be acquired until this one is <a + lt="release a read lock">released</a>. + + This functionality is especially useful for creating abstractions that desire the ability to consume a stream in its + entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours or cancel + the stream, which would interfere with your abstraction. This copy-pasted text seems not as useful as the old text. > @@ -866,6 +868,84 @@ option. If <code><a for="underlying source">type</a></code> is set to <code>unde </code></pre> </div> +<!-- Bikeshed doesn't let us mark this up correctly: https://github.com/tabatkins/bikeshed/issues/1344 --> +<h5 id="rs-asynciterator" for="ReadableStream">[@@asyncIterator]({ <var>preventCancel</var> = false } = {})</h5> What happened to getIterator()? > +</div> + +<emu-alg> + 1. If ! IsReadableStream(*this*) is *false*, throw a *TypeError* exception. + 1. Let _reader_ be ? AcquireReadableStreamDefaultReader(*this*). + 1. Let _iterator_ be ! ObjectCreate(`<a idl>ReadableStreamAsyncIteratorPrototype</a>`). + 1. Set _iterator_.[[asyncIteratorReader]] to _reader_. + 1. Set _iterator_.[[preventCancel]] to ! ToBoolean(_preventCancel_). + 1. Return _iterator_. +</emu-alg> + +<h3 id="rs-asynciterator-prototype" interface +lt="ReadableStreamAsyncIteratorPrototype">ReadableStreamAsyncIteratorPrototype</h3> + +{{ReadableStreamAsyncIteratorPrototype}} is an ordinary object that is used by {{ReadableStream/[@@asyncIterator]()}} to +construct the objects it returns. Instances of {{ReadableStreamAsyncIteratorPrototype}} implmenet the {{AsyncIterator}} Typo "implement" (maybe my fault). > + 1. If ! IsReadableStreamAsyncIterator(*this*) is *false*, throw a *TypeError* exception. + 1. Let _reader_ be *this*.[[asyncIteratorReader]]. + 1. If _reader_.[[ownerReadableStream]] is *undefined*, return <a>a promise rejected with</a> a *TypeError* exception. + 1. Return ! ReadableStreamDefaultReaderRead(_reader_, *true*). +</emu-alg> + +<h4 id="rs-asynciterator-prototype-return" method +for="ReadableStreamAsyncIteratorPrototype">return( <var>value</var> )</h4> + +<emu-alg> + 1. If ! IsReadableStreamAsyncIterator(*this*) is *false*, throw a *TypeError* exception. + 1. Let _reader_ be *this*.[[asyncIteratorReader]]. + 1. If *this*.[[preventCancel]] is *false*, then: + 1. If _reader_.[[ownerReadableStream]] is *undefined*, return <a>a promise rejected with</a> a *TypeError* + exception. + 1. Let _result_ be ! ReadableStreamReaderGenericCancel(_reader_, _value_). This needs to be transformed by a fulfillment handler that returns `! ReadableStreamCreateReadResult(_value_, *true*, *true*)` > + 1. If _reader_.[[ownerReadableStream]] is *undefined*, return <a>a promise rejected with</a> a *TypeError* exception. + 1. Return ! ReadableStreamDefaultReaderRead(_reader_, *true*). +</emu-alg> + +<h4 id="rs-asynciterator-prototype-return" method +for="ReadableStreamAsyncIteratorPrototype">return( <var>value</var> )</h4> + +<emu-alg> + 1. If ! IsReadableStreamAsyncIterator(*this*) is *false*, throw a *TypeError* exception. + 1. Let _reader_ be *this*.[[asyncIteratorReader]]. + 1. If *this*.[[preventCancel]] is *false*, then: + 1. If _reader_.[[ownerReadableStream]] is *undefined*, return <a>a promise rejected with</a> a *TypeError* + exception. + 1. Let _result_ be ! ReadableStreamReaderGenericCancel(_reader_, _value_). + 1. Otherwise, + 1. Let _result_ be ! ReadableStreamCreateReadResult(_value_, *true*, *true*). This needs to be a promise resolved with... > @@ -403,6 +403,8 @@ like <a href="#rs-pipe-through">pipeThrough</a>({ writable, readable }, options) <a href="#rs-pipe-to">pipeTo</a>(dest, { preventClose, preventAbort, preventCancel } = {}) <a href="#rs-tee">tee</a>() You need to import the cross-reference links from https://github.com/whatwg/streams/pull/950/files#diff-ec9cfa5f3f35ec1f84feb2e59686c34dR21 -- 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/954#pullrequestreview-153464052
Received on Friday, 7 September 2018 19:02:29 UTC