- From: Kyle Simpson <notifications@github.com>
- Date: Sun, 07 Feb 2021 08:41:40 -0800
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/946/774705703@github.com>
> but we shouldn't over-index on them. Agreed, to an extent. I don't think we should design a util that only serves my use case, but I also hope we don't design a util that falls short of it either. Would be nice to find a flexible compromise. If the util you suggested had an option to be called without the `taskCallback(..)` param, and in that case, could *only* listen to the `signal`'s event... that affordance would make your suggested util *much* more friendly for my purposes. For clarity, here's sorta what I'm suggesting: ```js async function abortableTask(signal, taskCallback) { if (signal?.aborted) throw new DOMException('', 'AbortError'); let onAbort, listener; const setOnAbort = (callback) => { onAbort = callback }; const taskPromise = taskCallback?.(setOnAbort); const signalPromise = new Promise((_, reject) => { listener = () => { onAbort?.(); reject(new DOMException('', 'AbortError')); }; signal?.addEventListener('abort', listener); }); return ( taskPromise ? Promise.race([ signalPromise, taskPromise ]) : signalPromise ) .finally(() => signal?.removeEventListener('abort', listener)); } // elsewhere const ac = new AbortController(); ac.signal.pr = abortableTask(ac.signal); ``` With just a few changes here, it makes the `taskCallback(..)` param optional. If it's omitted, it's not called and the `Promise.race(..)` is skipped. I think that's a compromise that serves both sets of use-cases well... it doesn't detract from your favored "insides-only" approach, but gives a non-hacky escape hatch for the "outsides" need. If instead I have to pass a function for `taskCallback(..)` that returns a never-resolving no-op promise, I've shot myself in the foot. Ostensibly, the purpose for me using this util would be to hopefully avoid/reduce the potential memory leakage, but now I'm creating a do-nothing promise that just hangs around (maybe forever?). -- 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/946#issuecomment-774705703
Received on Sunday, 7 February 2021 16:41:52 UTC