RXJS Nested subscribers with the last subscriber active

Date: 2024-02-28
import { Subject, BehaviorSubject, Observable } from 'rxjs';
import { switchMap } from 'rxjs/operators';
// Een Subject om nieuwe subscribers te registreren
const subscriberSubject = new Subject<Observable<any>>();
// Een BehaviorSubject om de laatste Observable te houden
const lastObservableSubject = new BehaviorSubject<Observable<any>>(null);
// Subscribe op de subject die nieuwe subscribers registreert
subscriberSubject.pipe(
switchMap(obs => {
// Zodra er een nieuwe subscriber komt, update de laatste Observable
lastObservableSubject.next(obs);
// Return de Observable voor deze subscriber
return obs;
})
).subscribe();
// Functie om een nieuwe Observable te registreren
function registerObservable(obs: Observable<any>) {
subscriberSubject.next(obs);
}
// Externe Observable die verandert
let externalObservable = new Observable<number>(observer => {
let count = 0;
const interval = setInterval(() => {
observer.next(count++);
if (count > 5) {
clearInterval(interval);
observer.complete();
}
}, 1000);
});
// Voorbeeld van het gebruik:
registerObservable(externalObservable);
// Simuleer 3 subscriptions die op verschillende tijden worden gedaan
const subscription1 = lastObservableSubject.subscribe(value => {
console.log("Subscriber 1 received:", value);
});
const subscription2 = lastObservableSubject.subscribe(value => {
console.log("Subscriber 2 received:", value);
});
const subscription3 = lastObservableSubject.subscribe(value => {
console.log("Subscriber 3 received:", value);
});
// Simuleer dat 'subscriber 3' na 3 seconden unsubscribed wordt
setTimeout(() => {
console.log("Unsubscribing 'Subscriber 3'...");
subscription3.unsubscribe();
}, 3000);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
83060cookie-checkRXJS Nested subscribers with the last subscriber active
0 of 2000 max characters.