- From: James Browning <notifications@github.com>
- Date: Wed, 19 Jul 2023 19:10:08 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/1162/1643001447@github.com>
> I like the pattern but I struggle to see how it could apply to this considering we have two discrete objects which share a private API:
>
> ```js
> class WatchSignal extends AbortSignal {
> constructor(abort) {
> super(abort)
> }
> }
>
> class WatchController extends AbortController {
> constructor() {
> super(function (abort) { // What is even `abort`? Maybe userland doesn't care?
>
> // Presumably we need to return an AbortSignal instance
> // to have AbortController assign this as the signal?
> return new WatchSignal(abort)
> })
> }
> }
> ```
It would probably make sense if it were just the controller itself, this also allows a subclass pair to share data between the controller and signal easily:
```js
const activePriorities = new WeakMap();
class PrioritySignal extends AbortSignal {
#priorityController;
constructor(priorityController) {
// AbortSignal can access the usual internal slots of the controller
super(priorityController);
// We can access whatever shared things we need of the watchController here too
this.#priorityController = priorityController;
}
get priority() {
return activePriorities.get(this.#priorityController);
}
}
class PriorityController extends AbortController {
constructor(initialPriority = 1) {
super(controller => {
return new WatchSignal(controller);
});
activePriorities.set(this, initialPriority);
}
}
```
--
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/1162#issuecomment-1643001447
You are receiving this because you are subscribed to this thread.
Message ID: <whatwg/dom/issues/1162/1643001447@github.com>
Received on Thursday, 20 July 2023 02:10:15 UTC