Я создал собственный сервис 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();
}
Nevermind, если это Subject
или a BehaviorSubject
.
Это хорошая практика?
Я бы сделал переадресацию на логин внутри вашей логики метода логики прямо перед вызовом subject.error или использовать auth guard для маршрута игроков. –
Я не думаю, что это хорошая идея добавить маршрутизатор внутри службы. Я не считаю ответственность за перенаправление пользователя на страницу входа в систему. –