Я использую Observable
для предоставления интерфейса подписки на события для клиентов из глобального ресурса, и мне нужно управлять этим ресурсом в соответствии с количеством активных подписок:
- Выделите глобальный ресурс, когда количество подписок станет больше 0
- Освободить глобальный ресурс, когда количество подписок станет равным 0
- Настройте стратегию использования ресурсов в зависимости от количества подписок.
Как правильно в RXJS отслеживать количество активных подписок?
Как реализовать следующее в синтаксисе RXJS? -
const myEvent: Observable<any> = new Observable();
myEvent.onSubscription((newCount: number, prevCount: number) => {
if(newCount === 0) {
// release global resource
} else {
// allocate global resource, if not yet allocated
}
// for a scalable resource usage / load,
// re-configure it, based on newCount
});
Я не ожидал бы гарантированного уведомления о каждом изменении, следовательно, newCount
+ prevCount
params.
UPDATE-1
Это не дубликат на это, потому что мне нужно, чтобы получить уведомление, когда число подписок изменений, а не только, чтобы получить счетчик на какой - то момент.
ОБНОВЛЕНИЕ-2
Пока без какого-либо ответа, я быстро придумал очень уродливый и ограниченный обходной путь, путем полной инкапсуляции и специально для типа Subject
. Очень надеемся найти правильное решение.
ОБНОВЛЕНИЕ-3
После нескольких ответов я все еще не уверен, как реализовать то, что я пытаюсь, а именно:
class CustomType {
}
class CountedObservable<T> extends Observable<T> {
private message: string; // random property
public onCount; // magical Observable that needs to be implemented
constructor(message: string) {
// super(); ???
this.message = message;
}
// random method
public getMessage() {
return this.message;
}
}
const a = new CountedObservable<CustomType>('hello'); // can create directly
const msg = a.getMessage(); // can call methods
a.subscribe((data: CustomType) => {
// handle subscriptions here;
});
// need that magic onCount implemented, so I can do this:
a.onCount.subscribe((newCount: number, prevCont: number) => {
// manage some external resources
});
Как реализовать такой класс CountedObservable
выше, который позволил бы мне подписываться на себя, а также на его свойство onCount
для контроля количества его клиентов/подписок?