Перед вами простой класс подписки на события.
class Signal<F extends (...args: any[]) => any> {
private handlers: F[] = [];
add(f: F) { this.handlers.push(f); }
remove(f: F) { this.handlers = this.handlers.filter(x => x !== f); }
emit(...args: Parameters<F>) { for (const f of this.handlers) f(...args); }
}
- Что произойдёт, если обработчик во время
emitудалит себя из списка? - А если во время
emitдобавить новый обработчик? - Как не допустить утечки подписок, когда экран, который подписался, закрыт?