【发布时间】:2021-12-31 04:02:00
【问题描述】:
我有一个在会员服务中观察到的用户对象。
我只想在用户对象发生相关更改时更新我的服务。
为了了解我的用户对象是否有相关变化,我将我的本地用户对象与观察到的用户对象进行比较。并且总是在之后分配新对象。
但是,这不起作用。
export class MemberService {
private subscription?: Subscription;
user?: User;
constructor(public auth: AuthService) {
this.subscription = this.auth.user$.subscribe((user) => {
const updateServices = this.hasUserRelevantChanges(user)
// apparently this line always fires before the functioncall above?!
this.user = user;
if (updateServices) {
this.updateMyServices();
}
});
}
ngOnDestroy() {
this.subscription?.unsubscribe();
}
hasUserRelevantChanges(user: User | undefined): boolean {
return user?.subscription !== this.user?.subscription ||
user?.username !== this.user?.username ||
user?.isBanned !== this.user?.isBanned;
}
updateMyServices(): void {
// Updating my services!!!
}
}
export class AuthService {
public readonly user$: Observable<User| undefined> = this.user.asObservable();
user: BehaviorSubject<User| undefined> = new BehaviorSubject<User| undefined>(undefined);
constructor(private httpHandler: HttpHandlerService) { ... }
handleUser(): void {
this.httpHandler.login().subscribe(
(user: User) => this.user.next(user));
}
updateUserData(newUser: User): void {
this.user.next(Object.assign(this.user.value, newUser));
}
}
为什么我的函数hasUserRelevantChanges() 总是比较相同的新对象?本地的 this.user 总是在这个检查中保存新的值,即使分配 this.user = user 是在之后出现的?
那么,与旧的/以前的用户对象相比,我如何了解我的新 user 对象的相关值是否发生了变化?
【问题讨论】:
标签: angular typescript rxjs