У меня проблема с Angular 8 и облачной базой данных Firebase. Если я получаю свой пользовательский документ изначально, это правильно. Затем я вызываю некоторые логики c, которые изменяют только некоторые значения, но не все. Затем я перезагружаю пользователя, но некоторые значения не верны, даже если они не обновляются. Это действительно странно, и я не знаю, почему это происходит. Вот мой фрагмент кода:
// if the user is set return the user, if not set get user from firebase, if withRefresh is true always refresh user
GetUser(withRefresh?: boolean): Observable<User> {
if (this.user == null || withRefresh) {
return this.authService.GetUser().pipe(map(user => {
console.log(user);
this.user = user;
return this.user;
}));
} else {
return of(this.user);
}
}
AuthService:
GetUser(): Observable<User> {
return this.afAuth.authState.pipe(switchMap((user) => {
if (user) {
return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
} else {
this.LogOut();
}
}));
}
Это моя панель управления, где я вызываю первый метод GetUser:
SyncActivities() {
this.appStore.GetUser().pipe(take(1)).subscribe((user) => {
if (this.appStore.user != null) {
this.syncActivitiesService.Synchronize(this.appStore.user);
}
});
}
В В конце моей функции Snychronize я перезагружаю пользователя и действия. Это возвращает неправильные значения.
if (i === activities.length - 1) {
this.appStore.GetUser(true).pipe(take(1)).subscribe(() => {
this.appStore.GetUserActivities(true);
});
}
В Firebase Cloud данные верны.
журнал консоли правильный журнал консоли неправильный