我有一个非常简单的场景。一个对象和一个可观察者。当客户端登录成功时,我会发布成功消息,当用户注销时,我会发布失败消息。
问题出现在 LoginComponent 中的 subscribe 方法中。 第一次一切正常。用户登录后我收到一个事件,但是之后,当用户再次注销并重新登录时,我收到两个相同的事件;如果用户注销然后再次登录,我收到三个重复事件,以此类推。
AuthService.ts
public _loggedIn: Subject<LoggedInOrResetPassword> = new Subject();
public loggedId: Observable<LoggedInOrResetPassword> = this._loggedIn.asObservable();
obtainAccessToken(){
// ommitted
this.httpClient.post(environment.baseUrl + url, null, requestOptions)
.subscribe(data => {
this.saveToken(data);
this._loggedIn.next(LoggedInOrResetPassword.createTrue());
});
// ommitted
}
private logout(navigateTo?: string){
this._loggedIn.next(LoggedInOrResetPassword.createFalse());
}
LoginComponent.ts
ngOnInit() {
this.authservice.loggedId.subscribe( ( loggedInOrResetPassword: LoggedInOrResetPassword ) => {
// HERE I GET DUPLICATE VALUES
});
ngOnDestroy
中取消订阅。 - PiccitakeUntil
,而不是手动取消订阅,就像这篇文章中所示:https://dev59.com/ZFoT5IYBdhLWcg3w8S-2 - ggradnig