我确实创建了自己的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();
}
没关系,如果它是Subject
或BehaviorSubject
。
这是一个好习惯吗?
答案 0 :(得分:0)
如何在重新订阅我的observable后忘记最后一个错误?
使用Subject
代替BehaviorSubject
。
var subject = new Rx.Subject();
BehaviorSubject
是记住Subject
的{{1}}变种之一。因此,如果您不希望每次current value
获取最新值,请使用subscribe
。