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);
830600cookie-checkRXJS Nested subscribers with the last subscriber active