Вы можете создать собственный Observable, который будет отслеживать количество подписок.
Вот простой пример:
let count = 0;
const tracked$ = new Observable(() => {
count++;
return ()=>{
count--;
if (count === 0) {
console.log('I am empty');
}
};
})
А затем объединить его с Observable, который выполняет реальную работу.Для простоты, давайте представим, что это просто таймер
// const tracked$ = ...
const data$ = Observable.timer(0, 5);
const result$ = data$
.merge(tracked$)
.take(5)
.subscribe(value => console.log('v:', value));
После того, как 5 значений были переданы - он будет записывать I am empty
.
Вот живой пример (с некоторой переписью и двумя подписками)):
https://observable -playground.github.io / gist / 4a7415f3528aa125fb686204041138cb
ПРИМЕЧАНИЕ. В этом коде используется нотация rxjs-compat, которую прощечитать.В приведенном выше примере используется обозначение .pipe
, которое сейчас более распространено.
Надеюсь, это поможет.