Re: [whatwg/streams] Define WritableStreamDefaultController.signal (#1132)

@yutakahirano commented on this pull request.



> @@ -4421,7 +4441,8 @@ the {{WritableStream}}'s public API.
  1. [=Reject=] |stream|.[=WritableStream/[[inFlightCloseRequest]]=] with |error|.
  1. Set |stream|.[=WritableStream/[[inFlightCloseRequest]]=] to undefined.
  1. Assert: |stream|.[=WritableStream/[[state]]=] is "`writable`" or "`erroring`".
- 1. If |stream|.[=WritableStream/[[pendingAbortRequest]]=] is not undefined,
+ 1. If |stream|.[=WritableStream/[[pendingAbortRequest]]=] is not undefined and |error| is not an

```
let reject;
close_promise = new Promise((res, rej) => reject = rej);
const ws = new WritableStream({
  start(c) {
    c.signal.addEventListener('abort', () => {
      const abort_error = new DOMException('foobar', 'AbortError');
      reject(abort_error);
    });
  }, close() {
    return close_promise;
  }
});

const writer = ws.getWriter();
writer.close();
const reason = Exception('hoge');
writer.abort(reason);
```

In this example, I think it's natural that `writer.closed` will be rejected by `reason`, but without this clause it'll be rejected with `abort_error`.

Another solution would be to expose `pendingAbortRequest.reason` in the controller so that the underlying sink can reject the result of `close()` with that.

-- 
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/1132#discussion_r645615674

Received on Friday, 4 June 2021 14:30:37 UTC