我确实创建了自己的可观察服务,以返回播放器的当前轨道。
我以这种方式在我的角度组件上订阅了此服务:
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();
}
如果是Subject
或BehaviorSubject
。
这是一个好习惯吗?
重新订阅我的可观察到的最后错误?
使用Subject
代替BehaviorSubject
。
var subject = new Rx.Subject();
BehaviorSubject
是记住 current value
的Subject
变体之一。因此,如果您不想每次subscribe
时都获得最新值,请使用Subject
。