Angular 2可观察错误处理

时间:2016-11-22 16:30:15

标签: angular rxjs observable rxjs5

我确实创建了自己的Observable服务,返回播放器的当前曲目。

我正在以这种方式订阅我的Angular组件上的这项服务:

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)发送错误序列。

如何在重新订阅后忘记最后一个错误  我的观察到了吗?

谢谢!

更新1:

我在这里做了一些新的测试,它只适用于我每次订阅时创建一个新主题,如下:

player(playlist: IPlaylist, fromBegin: boolean): Observable<IPlayerInfo> {

    this._player = new BehaviorSubject<IPlayerInfo>({ status: PlayerStatuses.LOADING });

    ... more code here ...

    return this._player.asObservable();
  }

没关系,如果它是SubjectBehaviorSubject

这是一个好习惯吗?

1 个答案:

答案 0 :(得分:0)

  

如何在重新订阅我的observable后忘记最后一个错误?

使用Subject代替BehaviorSubject

var subject = new Rx.Subject();

BehaviorSubject是记住Subject的{​​{1}}变种之一。因此,如果您不希望每次current value获取最新值,请使用subscribe