【发布时间】:2020-11-18 11:26:07
【问题描述】:
我有一个使用 Cloud Firestore 的 Angular 应用程序。我在一项服务中创建了一个函数,该函数从“评级”集合中获取用户评级。每个评分都存储在此集合中,文档 id 是用户 id 与电影 id 的组合。
getUserRating(movie_id) {
return this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.db.collection('ratings').doc(user.uid + '_' + movie_id).valueChanges();
} else {
return [];
}
})
);
}
我在组件中的 ngOnInit() 中执行此代码。
this.ratingService.getUserRating(this.release.id).subscribe(doc => {
this.userRating = doc['rating'];
this.ratingSliderValue = this.userRating;
}));
此代码的问题在于,如果文档已经存在,它会响应更改,但如果用户为电影设置了初始评级,它不会执行,因为文档以前不存在。该页面必须重新加载。有关如何使其正常工作的任何建议?
【问题讨论】:
-
您应该对以前不存在的文档进行更改。你确定你不只是订阅 else 块中的空列表,它永远不会改变吗?
-
我在 else 语句下运行了 console.log,但它再也没有返回。我不确定还有什么可能导致这种情况。
-
已解决。发生这种情况是因为我没有处理未定义的数据。我添加了“if (doc) {}”,这似乎解决了问题。
-
很高兴知道您自己解决了这个问题@KevinShiflett。请考虑将解决方案添加到您的帖子的答案中并接受它。这样,如果社区中的其他人面临与您相同的问题,他们可以轻松参考您的解决方案,此外这将有助于提高您在 Stack Overflow 上的声誉。 :)
标签: angular typescript firebase asynchronous google-cloud-firestore