首页 > 解决方案 > Angular Firebase Cloud 返回不正确的数据

问题描述

我对 Angular 8 和 Firebase 云数据库有疑问。如果我最初得到我的用户文档是正确的。然后我调用一些只改变一些值但不是全部的逻辑。然后我重新加载用户,但有些值不正确,即使它们没有更新。这真的很奇怪,我不知道为什么会这样。这是我的代码片段:

    // 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);
        }
    }

认证服务:

    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 上,数据是正确的。

控制台日志正确 控制台日志不正确

标签: javascriptangularfirebasegoogle-cloud-firestore

解决方案


推荐阅读