Comments 3
Нередко обхожусь одним только редисом
0
Найс пет-проджект, RxJS на минималках.
Хоть PubSub можно и самому написать за 5 минут без лишних выкрутасов:
class Observer<T = any> {
private subs: Subscriber[] = [];
subscribe(sub: Subscriber<T>): Unsubscribe {
this.subs.push(sub);
return () => {
this.subs = this.subs.filter((item) => item !== sub);
};
}
publish(...args: T[]): void {
this.subs.forEach((sub) => {
sub(...args);
});
}
}
type Subscriber<T = any> = (...args: T[]) => void;
type Unsubscribe = () => void;
// Client code example
const observer = new Observer<number>();
const unsubscribe = observer.subscribe((num) => {
console.log(num);
});
observer.publish(42); // 42
unsubscribe();
observer.publish(666); // -
+1
Хоть PubSub можно и самому написать за 5 минут без лишних выкрутасов:
Разумеется, это достаточно простой в реализации паттерн. В принципе, в моем варианте, класс, реализующий собственно PubSub, занимает 44 строчки кода вместе с импортами, отступами и JSDoc-комментариями. Все остальное - это выкрутасы для декораторов. Спасибо за комментарий!
PS: RxJS на минималках - это скорее другая моя поделка: https://github.com/YMSpektor/x-vars
+1
Sign up to leave a comment.
Publish-Subscribe на TypeScript — уменьшаем связанность