2016-11-22 5 views
0

Я создал собственный сервис 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.

Это хорошая практика?

+0

Я бы сделал переадресацию на логин внутри вашей логики метода логики прямо перед вызовом subject.error или использовать auth guard для маршрута игроков. –

+0

Я не думаю, что это хорошая идея добавить маршрутизатор внутри службы. Я не считаю ответственность за перенаправление пользователя на страницу входа в систему. –

ответ

0

Как я могу забыть про последнюю ошибку после повторной подписки на мой наблюдаемый?

Использовать Subject вместо BehaviorSubject.

var subject = new Rx.Subject(); 

BehaviorSubject является одним из Subject варианта, который помнят current value. Поэтому, если вы не хотите получать последнее значение каждый раз, когда вы subscribe, используйте Subject.

+0

К сожалению, это не сработало. Я продолжаю перенаправлять после входа с последней ошибкой. –

+0

Привет @ Майкл, я просто обновляю свой вопрос. Выполнял некоторые тесты, и он работает только при создании нового объекта каждый раз, когда я подписываюсь. Есть предположения? –

Смежные вопросы