Skip to content

Instantly share code, notes, and snippets.

@syg
Last active June 12, 2020 00:55
Show Gist options
  • Save syg/13d44f2b1a36095a90f722a1b84e6da2 to your computer and use it in GitHub Desktop.
Save syg/13d44f2b1a36095a90f722a1b84e6da2 to your computer and use it in GitHub Desktop.
let gListenersFR = new FinalizationRegistry(
({ socket, wrapper }) => socket.removeEventListener('message', wrapper));
class EventAccumulator {
constructor(socket) {
this.events = [];
this.listener = (ev) => { this.events.push(ev); };
let weakRef = new WeakRef(this.listener);
let wrapper = (ev) => { weakRef.deref()?.(ev); };
socket.addEventListener('message', wrapper);
gListenersFR.register(this.listener, { socket, wrapper });
}
}
// Intended use is that when EventAccumulator dies, no need to manually
// unregister the event listener on socket, everything takes care of
// itself.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment