在创建文档时获取实时更新?

时间:2020-07-28 23:00:30

标签: angular typescript firebase asynchronous google-cloud-firestore

我有一个利用Cloud Firestore的角度应用程序。我在服务中创建了一个函数,该函数从“评级”集合中获取用户评级。每个分级都存储在此收藏集中,文档ID是用户ID和电影ID组合。

grp1.concat(", ").concat(grp2, grp3);

然后我在组件中的ngOnInit()中执行此代码。

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 [];
        }
      })
    );
  }

此代码的问题是,如果文档已经存在,它确实会响应更改,但是如果用户设置了影片的初始评级,则该文档将不会执行,因为该文档先前不存在。该页面必须重新加载。有关如何使其正常工作的任何建议?

1 个答案:

答案 0 :(得分:1)

事实证明是因为我没有处理未定义的响应。 valueChanges返回一个未知的可观察值,并且设置doc ['rating']引发了未定义的错误。用if(doc){}包装代码可以解决此问题并听取更新。

this.ratingService.getUserRating(this.release.id).subscribe(doc => {
    if (doc) {
       this.userRating = doc['rating'];
       this.ratingSliderValue = this.userRating;
    }
}));