- From: Domenic Denicola <notifications@github.com>
- Date: Thu, 29 Oct 2020 08:51:29 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/issues/933@github.com>
Ported from https://github.com/whatwg/dom/issues/881.
Consider the following code we're adding as an example to the Streams Standard in https://github.com/whatwg/streams/pull/1059:
```js
const controller = new AbortController();
const pipePromise = readable1.pipeTo(writable, { preventAbort: true, signal: controller.signal });
// ... some time later ...
controller.abort();
// Wait for the pipe to complete before starting a new one:
try {
await pipePromise;
} catch (e) {
// Swallow "AbortError" DOMExceptions as expected, but rethrow any unexpected failures.
if (e.name !== "AbortError") {
throw e;
}
}
// Start the new pipe!
readable2.pipeTo(writable);
```
Wouldn't it be nice if we could do this instead?
```js
const controller = new AbortController();
const pipePromise = readable1.pipeTo(writable, { preventAbort: true, signal: controller.signal });
// ... some time later ...
controller.abort();
await DOMException.ignoreAborts(pipePromise);
// Start the new pipe!
readable2.pipeTo(writable);
```
The semantics here are roughly
```js
DOMException.ignoreAborts = function (promise) {
if (!isPromise(promise)) {
throw new TypeError();
}
return promise.catch(e => {
if (isDOMException(e) && e.name === "AbortError") {
// swallow exception
} else {
// rethrow
throw e;
}
});
};
```
This is small enough that I'd be willing to implement it in Chromium, if given the binding team's blessing. (@yuki3, thoughts?)
Any thoughts from other implementers?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/heycam/webidl/issues/933
Received on Thursday, 29 October 2020 15:51:42 UTC