- From: Domenic Denicola <notifications@github.com>
- Date: Fri, 02 Dec 2016 17:27:37 -0800
- To: whatwg/streams <streams@noreply.github.com>
- Message-ID: <whatwg/streams/pull/619/review/11266963@github.com>
domenic approved this pull request. LGTM with nits. Thanks so much. > @@ -2614,6 +2614,18 @@ Instances of {{WritableStream}} are created with the internal slots described in <td>\[[writeRequests]] <td>A List of promises representing the stream's internal queue of pending writes </tr> + <tr> + <td>\[[pendingWriteRequest]] + <td>The promise for the current pending write operation + </tr> + <tr> + <td>\[[pendingCloseRequest]] + <td>The promise returned from the writer close method `{{ReadableStreamDefaultWriter/close()}` instead of just `close` probably > @@ -2759,6 +2771,14 @@ writable stream is <a>locked to a writer</a>. 1. Assert: _state_ is `"writable"` or `"closing"`. 1. Let _error_ be a new *TypeError* indicating that the stream has been aborted. 1. Perform ! WritableStreamError(_stream_, _error_). + 1. Let _controller_ be _stream_.[[writableStreamController]]. + 1. Assert: _controller_ is not *undefined*. + 1. If _controller_.[[writing]] is *true* or _controller_.[[inClose]] is *true*, + 1. Set _stream_.[[pendingAbortRequest]] to <a>a new promise</a>. + 1. If _controller_.[[writing]] is *true*, return the result of transforming _stream_.[[pendingAbortRequest]] by a + fulfillment handler that returns + ! WritableStreamDefaultControllerAbort(_stream_.[[writableStreamController]], _reason_). ! on previous line (the idea is to make the wrapping machine-enforceable, at least in theory) > @@ -2789,32 +2809,58 @@ visible through the {{WritableStream}}'s public API. )</h4> <emu-alg> - 1. Let _state_ be _stream_.[[state]]. - 1. Assert: _state_ is `"writable"` or `"closing"`. - 1. Repeat for each _writeRequest_ that is an element of _stream_.[[writeRequests]], - 1. <a>Reject</a> _writeRequest_ with _e_. - 1. Set _stream_.[[writeRequests]] to an empty List. + 1. Let _oldState_ be _stream_.[[state]]. + 1. Assert: _oldState_ is `"writable"` or `"closing".` backtick before period > + 1. <a>Resolve</a> _stream_.[[pendingAbortRequest]] with *undefined*. + 1. Set _stream_.[[pendingAbortRequest]] to *undefined*. +</emu-alg> + +<h4 id="writable-stream-reject-unresolved-promises" aoid="WritableStreamRejectUnresolvedPromises" +nothrow>WritableStreamRejectUnresolvedPromises ( <var>stream</var> )</h4> + +<emu-alg> + 1. Assert: _stream_.[[state]] is `"errored"`. + 1. Assert: _stream_.[[pendingWriteRequest]] is *undefined*. + 1. Let _storedError_ be _stream_.[[storedError]]. + 1. Repeat for each _writeRequest_ that is an element of _stream_.[[writeRequests]], + 1. <a>Reject</a> _writeRequest_ with _storedError_. + 1. Set _stream_.[[writeRequests]] to an empty List. + 1. If _stream_.[[pendingCloseRequest]] is not *undefined*, + 1. Assert: _stream_.[[writableStreamController]].[[inClose]] is *false*, period not comma > @@ -3213,6 +3259,11 @@ Instances of {{WritableStreamDefaultController}} are created with the internal s <td>A boolean flag set to <emu-val>true</emu-val> while the <a>underlying sink</a>'s <code>write</code> method is executing and has not yet fulfilled, used to prevent reentrant calls </tr> + <tr> + <td>\[[inClose]] + <td>A boolean flag set to <emu-val>true</emu-val> while the <a>underlying sink</a>'s <code>close</code> method is + executing and has not yet fulfilled, used to prevent the <code>abort</code> method from `{{WritableStreamDefaultWriter/abort()}}` > 1. Let _sinkClosePromise_ be ! PromiseInvokeOrNoop(_controller_.[[underlyingSink]], `"close"`, « _controller_ »). 1. <a>Upon fulfillment</a> of _sinkClosePromise_, - 1. If _stream_.[[state]] is not `"closing"`, return. - 1. Perform ! WritableStreamFulfillWriteRequest(_stream_). + 1. Assert: _controller_.[[inClose]] is *true*. + 1. Set _controller_.[[InClose]] to *false*. Lowercase InClose > @@ -173,11 +176,26 @@ function WritableStreamFinishClose(stream) { defaultWriterClosedPromiseResolve(stream._writer); } -function WritableStreamFulfillWriteRequest(stream) { - assert(stream._writeRequests.length > 0); +function WritableStreamRejectUnresolvedPromises(stream) { WritableStreamRejectPromisesInReactionToError? Not important, but maybe an improvement. -- 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/619#pullrequestreview-11266963
Received on Saturday, 3 December 2016 01:28:22 UTC