我有以下代码
public getFullUserData(): User {
const userRef: AngularFirestoreDocument<any> = this.afs.doc(
`users/${this.authState.uid}`);
return userRef.valueChanges().pipe(map((user: User) => user));
}
我要实现的目标是使User对象脱离可观察对象,并在此函数中将其返回...
确切地说,我想返回无法观察到的严格数据。 那有可能吗? 还是我应该返回可观察的东西并在以后订阅它们?
我知道我犯了某种基本的错误,但是现在我完全迷路了...
有人可以解释如何实现这一目标吗? 我在服务中使用此方法只是为了稍后在其他组件中调用它。
答案 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)
将等待,直到获得第一个响应,然后退订。这里没有可观察到的维护!