私は自分のObservableサービスを作成して、プレーヤーの現在のトラックを返すようにしました。角2観測可能なエラー処理
私は私の角度成分にこのサービスにこの方法をサブスクライブしている:あなたが見ることができるように、私はエラーを持っているとき
this.playerSubscription = this.player
.player(playlist)
.subscribe(
playerInfo => this.playerInfo = playerInfo,
error => this.router.navigate(['login'], { queryParams: { error: 'expired_token' }})
);
は、私は、ログインページにユーザーをリダイレクトします。
問題は以前のエラーの後にログインしたときにサブスクリプションが私にの最新のエラーシーケンスを返し、再びログインページにリダイレクトされることです。
私のサービスでは、BehaviorSubjectを使用して、有効なシーケンスにsubject.next(message)
を実行していて、エラーシーケンスを送信するのにsubject.error(error)
を実行しています。
を私の観測対象に再登録した後の最後のエラーを忘れることはできますか?
ありがとうございました!
UPDATE 1:
私はここにいくつかの新しいテストを行なったし、私は新しい件名に私が購読するたびに作成するときにのみ、怒鳴るように、動作します:
player(playlist: IPlaylist, fromBegin: boolean): Observable<IPlayerInfo> {
this._player = new BehaviorSubject<IPlayerInfo>({ status: PlayerStatuses.LOADING });
... more code here ...
return this._player.asObservable();
}
ネヴァーマインドをそれはSubject
かだ場合a BehaviorSubject
。
これは良い方法ですか?
subject.errorコールの直前にプレーヤメソッドロジック内にログインするか、プレイヤールートの認証ガードを使用するようにリダイレクトします。 –
サービス内にルータを追加することはお勧めできません。私はログインページのためにユーザーをリダイレクトするのはサービス責任だとは思わない。 –