【发布时间】:2019-02-25 00:08:43
【问题描述】:
我有一个调用“getUserDocInfo()”的组件,它在它自己的服务中。我将如何调用该函数,然后将返回的数据用于进一步的代码?
我的组件
getToken(){
this.userService.getUserDocInfo();
// once this is called I would like to use some of the values in the returned data
}
我的服务
getUserDocInfo() {
this.getUserInfo().then(() => {
this.userDoc = this.afs.doc(`users/${this.userID}`);
this.user = this.userDoc.snapshotChanges();
this.user.subscribe(value => {
const data = value.payload.data();
});
})
}
async getUserInfo() {
const user = await this.authService.isLoggedIn()
if (user) {
this.userID = user.uid;
} else {
// do something else
}
}
我们将不胜感激任何有关最佳实践的帮助。
【问题讨论】:
-
您要查找的关键字是
return。我强烈建议你不要将 promises 和 observables 混为一谈。学习 observables,并坚持下去。 -
谢谢。我的问题主要是围绕如何使用返回的数据。我只想要它的一部分。我是 this.userService.getUserDocInfo().subscribe 吗?
-
是的。但要使其正常工作,getUserDocInfo() 必须返回一个可观察对象。
-
我总是说:“服务返回 Observables -或 Promise-,组件订阅服务”。一般来说是一个更好的方法。主要是因为您可以更改服务而无需更改组件。例如首先,您的服务可以在从 dbs 读取后从文件中读取数据。因此,您可以将多个 observables 组合在一个组件中。如果您想对某些表进行“缓存”,则服务于“可缓存”表的服务(或者如果不是对服务器的调用)。所有这些都不会强迫您更改组件
标签: angular typescript google-cloud-firestore angularfire5