Ich habe einen Angular-Dienst, der einen Datenstrom (http-Aufruf) an mehrere Komponenten asynchron teilt. Ich muss den http-Dienst auf Benutzeraktion von Zeit zu Zeit erinnern.rxjs5/Angular - Clear ReplaySubject Puffer
Ich verwende ein ReplaySubject, um geladene Werte zu speichern und an Abonnenten zu senden, die nach dem http-Aufruf abonnieren.
Ich würde gerne wissen, ob es eine Möglichkeit gibt, den ReplaySubject Puffer zu löschen, bevor Sie nachfolgende HTTP-Aufrufe machen? Während ich dabei bin, vermute ich, dass ich mich auch abmelden muss, um kein Leck zu erstellen?
Service:
@Injectable()
export class GreatDataService {
public data$: ReplaySubject<any>;
private subs: Subscription;
constructor(private http: Http) {
this.data$ = new ReplaySubject(1);
}
public refresh() {
if (this.subs) {
this.subs.unsubscribe();
this.subs = null;
}
this.subs = this.http.get('/api').subscribe(this.data$)
}
}
Top-Level-Abschnitt Komponente:
...
constructor(private greatDataService: GreatDataService) {}
ngOnInit() {
this.greatDataService.refresh();
}
...
Komponente 1:
...
constructor(private greatDataService: GreatDataService) {}
ngOnInit() {
this.greatDataService.data$.subscribe(
x => console.log('subscriber 1: ' + x),
err => console.log('subscriber 1: ' + err),
() => console.log('subscriber 1: Completed')
);
...
Komponente 2:
...
constructor(private greatDataService: GreatDataService) {}
ngOnInit() {
this.greatDataService.data$.subscribe(
x => console.log('subscriber 2: ' + x),
err => console.log('subscriber 2: ' + err),
() => console.log('subscriber 2: Completed')
);
...
Dies ist nicht Angular Antwort !! –