CHALLENGE
class EventEmitter {
#listeners = new WeakMap();
#registry = new FinalizationRegistry((label) => {
console.log(`Cleaned up: ${label}`);
});
subscribe(target, callback) {
if (!this.#listeners.has(target)) {
this.#listeners.set(target, []);
}
this.#listeners.get(target).push(callback);
this.#registry.register(target, target.name ?? "unknown");
}
emit(target) {
const cbs = this.#listeners.get(target);
if (cbs) cbs.forEach(cb => cb());
}
}
const emitter = new EventEmitter();
let obj1 = { name: "sensor" };
let obj2 = { name: "timer" };
const ws = new WeakSet([obj1, obj2]);
emitter.subscribe(obj1, () => console.log("sensor fired"));
emitter.subscribe(obj2, () => console.log("timer fired"));
emitter.subscribe(obj1, () => console.log("sensor logged"));
emitter.emit(obj1);
console.log(ws.has(obj1));
obj1 = null;
console.log(ws.has({ name: "sensor" }));🔥2❤1
The Node.js team has long been discussing shifting Node to a new schedule of one major release per year (instead of two), removing the odd/even distinction, and making every release LTS (with a prior 11 months of alpha/current status). This is a preview post not intended for final publication till April, so things are subject to change (backup version).
The Node.js Team
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2