- From: Keith Cirkel <notifications@github.com>
- Date: Wed, 15 Feb 2023 03:25:00 -0800
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/1162@github.com>
Currently it is not possible to subclass these, despite DOM interfaces doing so (`TaskController`/`TaskSignal`). Currently each of the properties in `AbortSignal` asserts that it is either an `AbortSignal` or `TaskSignal`, and if it is not it will throw. This means doing the following results in an error: ```js class WatchSignal extends AbortSignal {} new WatchSignal() // This throws... but we can try Object.create() const ws = Object.create(WatchSignal.prototype) // We got signal! console.assert( ws instanceof AbortSignal ) ws.aborted // throws with invocation or "does not implement interface AbortSignal" error ``` Instead one has to use a delegate class which means re-implementing all methods and `Symbol.hasInstance` if you want to keep brand checks. Making `AbortController` extensible comes with its own problems, however. Chiefly how does one associate the controller with the signal? ### Why make it extensible? Of course the request to make it extensible begs the question as to why. I think `TaskController`/`TaskSignal` provides good precedent here - extended versions are useful to pack extra data into an interface, especially one that can be passed between contexts. `TaskSignals` extend the concept to add a `priority` and `prioritychange` event, and here are some other ideas that could be implemented in userland: - `PauseController`/`PauseSignal` with a `paused` property and `pausedchanged` event, allowing for pausing/resuming of tasks. - `RetryController`/`RetrySignal`, with a `retry` number property, allowing consumers to know how often to retry a task. - `DelayController`/`DelaySignal`, which has a `waitTime` number property, allowing consumers to delay a task before execution. All of these subclasses can still be passed freely to downstream functions like `fetch`, but avoid the need to send a whole slew of signals to a function. -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/dom/issues/1162 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/dom/issues/1162@github.com>
Received on Wednesday, 15 February 2023 11:25:13 UTC