- From: Mattias Buelens <notifications@github.com>
- Date: Mon, 17 Aug 2020 15:15:56 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/881/675141948@github.com>
I like how in the current design of abort signals, there's only *one-way* communication from the `AbortController` to the `AbortSignal`. An `AbortSignal` can observe and get notified on the state of its parent `AbortController`, but it can in no way alter its parent's state or behavior. This allows developers to freely pass `controller.signal` around to whatever user-defined or platform-defined function (or functions), without worrying about them affecting the controller. With the original proposal, that would break: an abort signal would now be able to change if, how and when the promise from `controller.abort()` would resolve or reject. Throw in [signals following other signals](https://dom.spec.whatwg.org/#abortsignal-follow), and you get a lot of "action at a distance". Also, how would this interact with something like `Promise.race()`? ```js const controller = new AbortController(); const promise = Promise.race([ fetch("/fast", { signal: controller.signal }), fetch("/slow", { signal: controller.signal }) ]); // after "/fast" has been fetched: const abortPromise = await controller.abort(); // `promise` resolves with result from "/fast" // `abortPromise` rejects with an AbortError from "/slow"... but should it really? 😕 ``` --- > ```js > await DOMException.ignoreAborts(pipePromise); > ``` This proposal could work. I'm already using a similar helper in my own code: ```js function rethrowUnlessAbortError(e) { if (e.name !== "AbortError") { throw e; } } await promise.catch(rethrowUnlessAbortError); ``` Not sure about the name `ignoreAborts`, but I don't have anything better either. 🤷♂️ -- 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/dom/issues/881#issuecomment-675141948
Received on Monday, 17 August 2020 22:16:08 UTC