Ich habe meinen eigenen Observable Service erstellt, der die aktuellen Tracks eines Players zurückgibt.Angular 2 Observable Fehlerbehandlung
ich diesen Dienst auf meinem Angular Komponente abonnieren so:
this.playerSubscription = this.player
.player(playlist)
.subscribe(
playerInfo => this.playerInfo = playerInfo,
error => this.router.navigate(['login'], { queryParams: { error: 'expired_token' }})
);
Wie man sehen kann, wenn ich einen Fehler haben, leite ich den Benutzer auf die Login-Seite.
Das Problem ist, wenn ich nach einem vorherigen Fehler anmelden, das Abonnement zurück zu mir die neuesten Fehler-Sequenz und ich werde erneut auf die Anmeldeseite umgeleitet.
In meinem Dienst verwende ich das BehaviorSubject und mache subject.next(message)
für gültige Sequenzen und subject.error(error)
, um eine Fehlersequenz zu senden.
Wie kann ich den letzten Fehler nach der Neuanmeldung zu meinem Observable vergessen?
Vielen Dank!
UPDATE 1:
Ich habe einige neue Tests hier und es funktioniert nur, wenn ich ein neues Thema jedes Mal schaffe ich zu abonnieren, wie unten:
player(playlist: IPlaylist, fromBegin: boolean): Observable<IPlayerInfo> {
this._player = new BehaviorSubject<IPlayerInfo>({ status: PlayerStatuses.LOADING });
... more code here ...
return this._player.asObservable();
}
Nevermind, wenn es ein Subject
ist oder a BehaviorSubject
.
Ist das eine gute Praxis?
Ich würde umleiten, um innerhalb der Player-Methode Logik direkt vor subject.error Anruf anmelden oder auth guard für Spieler Route verwenden. –
Ich glaube nicht, dass es eine gute Idee ist, einen Router in einem Dienst hinzuzufügen. Ich denke nicht, dass es eine Serviceverantwortung ist, den Benutzer für die Anmeldeseite umzuleiten. –