- From: Andrew Nosenko <notifications@github.com>
- Date: Fri, 04 Dec 2020 15:14:52 -0800
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
Received on Friday, 4 December 2020 23:15:05 UTC
> I wonder if we should flush out the use cases @annevk, here's one I've been recently experimenting with: `AbortablePromise`. It creates a child `AbortController` to help with the proper garbage collection of event listeners, because the child `AbortController`/`AbortSignal` will go out of scope when the promise is resolved. In a nutshell ([full gist](https://gist.github.com/noseratio/b7de3c7383ae3660904d650cd418c2dd)): ```JavaScript function delay(ms, outerSignal) { return new AbortablePromise(outerSignal, ({resolve, signal}) => { const id = setTimeout(resolve, ms); signal.addEventListener('abort', () => clearTimeout(id)); }); } const controller = new AbortController(); setTimeout(() => controller.abort(), 1000); await delay(2000, controller.signal); ``` I haven't checked yet if everything gets GC'ed as expected, but it certainly would not without a child controller. This experiment was inspired by @jakearchibald's ["Event listeners and garbage collection"](https://jakearchibald.com/2020/events-and-gc/) - thanks Jake! -- 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/920#issuecomment-739071424
Received on Friday, 4 December 2020 23:15:05 UTC