如何从AngularFirestore的valueChanges()中获取数据

时间:2019-06-13 20:32:05

标签: angular google-cloud-firestore

我有以下代码

public getFullUserData(): User {
const userRef: AngularFirestoreDocument<any> = this.afs.doc(
  `users/${this.authState.uid}`);
return userRef.valueChanges().pipe(map((user: User) => user));
}

我要实现的目标是使User对象脱离可观察对象,并在此函数中将其返回...

确切地说,我想返回无法观察到的严格数据。 那有可能吗? 还是我应该返回可观察的东西并在以后订阅它们?

我知道我犯了某种基本的错误,但是现在我完全迷路了...

有人可以解释如何实现这一目标吗? 我在服务中使用此方法只是为了稍后在其他组件中调用它。

1 个答案:

答案 0 :(得分:0)

将它们分开。

const userRef: AngularFirestoreDocument = this.afs.doc(users/${user.uid});

userRef.valueChanges().subscribe(res=>{
    if(res){
       // work with data here
    }
});

我认为您想让用户退出该方法而无需订阅,但是我不确定我是否会关注您。

this.afs.doc(users/${user.uid}).valueChanges().pipe(
    take(1)
).subscribe(data => {
    // work with data here
});

也许您想要一个无需花费时间即可进行订阅并返回用户的函数?

function returnUser():user {
    this.afs.doc(users/${user.uid}).valueChanges().pipe(take(1)).subscribe(user => {
        return user;
    });
}

take(1)将等待,直到获得第一个响应,然后退订。这里没有可观察到的维护!