Angular 2可观察的误差处理



我确实创建了自己的可观察服务,以返回播放器的当前轨道。

我以这种方式在我的角度组件上订阅了此服务:

this.playerSubscription = this.player
      .player(playlist)
      .subscribe(
        playerInfo => this.playerInfo = playerInfo,
        error => this.router.navigate(['login'], { queryParams: { error: 'expired_token' }})
      );

您可以看到,当我有错误时,我将用户重定向到登录页面。

问题是当我在上一个错误后登录时,订阅返回给我 LAST错误序列,我将再次重定向到登录页面。

在我的服务上,我正在使用chativionorsubject并执行subject.next(message)对有效序列,而subject.error(error)发送错误序列。

重新订阅后我怎么会忘记最后一个错误 对我的可观察?

谢谢!

更新1:

我在这里进行了一些新测试,只有在我每次订阅时创建一个新主题时才有效,例如Bellow:

player(playlist: IPlaylist, fromBegin: boolean): Observable<IPlayerInfo> {
    this._player = new BehaviorSubject<IPlayerInfo>({ status: PlayerStatuses.LOADING });
    ... more code here ...
    return this._player.asObservable();
  }

如果是SubjectBehaviorSubject

这是一个好习惯吗?

重新订阅我的可观察到的最后错误?

使用Subject代替BehaviorSubject

var subject = new Rx.Subject();

BehaviorSubject是记住 current valueSubject变体之一。因此,如果您不想每次subscribe时都获得最新值,请使用Subject

最新更新