2016-11-22 66 views
0

我确实创建了自己的可观察服务,返回播放器的当前曲目。Angular 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)发送错误序列。

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

谢谢!

更新1:

我做了一些新的测试在这里,当我创建一个新课题每次我订阅的时候,像波纹管它只:

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

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

    ... more code here ... 

    return this._player.asObservable(); 
    } 

没关系,如果它是一个Subject或一个BehaviorSubject

这是一个很好的做法吗?

+0

我会做重定向登录你的球员方法逻辑权限之前subject.error调用或使用auth后卫球员路线。 –

+0

我认为在服务中添加路由器不是一个好主意。我认为将用户重定向到登录页面不是一项服务责任。 –

回答

0

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

使用Subject而不是BehaviorSubject

var subject = new Rx.Subject(); 

BehaviorSubjectSubject变体,它记得current value之一。所以如果你不想每次获得最新的价值subscribe,请使用Subject

+0

不幸的是,它没有奏效。在用最后一个错误登录后,我一直在重定向。 –

+0

嗨@迈克尔,我只是更新我的问题。做了一些测试,它只在我每次订阅时创建一个新主题时才起作用。有什么想法吗? –