Javascript 如何知道实时更新何时结束-带angular的Cloud Firestore ionic 4

Javascript 如何知道实时更新何时结束-带angular的Cloud Firestore ionic 4,javascript,angular,typescript,ionic4,Javascript,Angular,Typescript,Ionic4,我正在为我的数据库使用CloudFireStore,在读写方面没有问题。我的问题是,我不知道如何知道实时更新何时结束! 我正在使用官方云firestore文档中描述的实时更新。它返回一个函数,而不是一个可观察函数。现在我不知道如何正确使用它。 我需要在加载数据后执行一些代码,但我没有订阅((数据)=>{…})来将其放在那里!! 怎么做? 如果我缺乏知识,请指导我阅读一些文档。 谢谢 这段代码运行良好,我直接在类似于html的ListService上使用它 public places$: Beha

我正在为我的数据库使用CloudFireStore,在读写方面没有问题。我的问题是,我不知道如何知道实时更新何时结束! 我正在使用官方云firestore文档中描述的实时更新。它返回一个函数,而不是一个可观察函数。现在我不知道如何正确使用它。 我需要在加载数据后执行一些代码,但我没有订阅((数据)=>{…})来将其放在那里!! 怎么做? 如果我缺乏知识,请指导我阅读一些文档。 谢谢

这段代码运行良好,我直接在类似于html的ListService上使用它

public places$: BehaviorSubject<Array<Place>> = new BehaviorSubject<Array<Place>>([]);
private unsubscribe: Function;

public list(city: string, country: string) {
      return this.unsubscribe = this.firestore.firestore.collection('places')
          .where("location.country", "==", country)
          .where("location.city", "==", city)
          .orderBy("startDate", "desc")
          .onSnapshot(querySnapshot => {
              const list: Place[] = [];

              if(!querySnapshot.docs.length) {
                  this.places$.next(list);
              } else {
                  querySnapshot.docs.forEach(doc => {
                      let places = new Place();
                      place = doc.data() as Place;
                      places.push(place);
                      if(list.length === querySnapshot.docs.length) {
                          this.places$.next(list);
                      }
                  });
              }
          });
  }
公共场所$:BehaviorSubject=新的BehaviorSubject([]); 私人退订:功能; 公共列表(城市:字符串,国家:字符串){ 返回this.unsubscribe=this.firestore.firestore.collection('places')) .where(“location.country”,“==”,country) .where(“location.city”,“==”,city) .orderBy(“开始日期”、“说明”) .onSnapshot(querySnapshot=>{ 常数列表:位置[]=[]; 如果(!querySnapshot.docs.length){ this.places$next(列表); }否则{ querySnapshot.docs.forEach(doc=>{ 让位置=新位置(); 地点=doc.data()作为地点; 地点。推(地点); if(list.length==querySnapshot.docs.length){ this.places$next(列表); } }); } }); }
您需要订阅此。places$

this.places$.subscribe((data) => {
   console.log(data);
});

由于实时函数将输出添加到
BehaviorSubject
中,因此实时函数返回的内容不符合要求

看这里

let places = new Place();
place = doc.data() as Place;
places.push(place);
if(list.length === querySnapshot.docs.length) {
   this.places$.next(list);
}
这意味着如果你想对数据做些什么,你只需要订阅
places$

另外,我认为您有一个小的输入错误,您从未将值推送到
列表
数组。
应该是这样的:

。。。
.onSnapshot(querySnapshot=>{
常数列表:位置[]=[];
如果(!querySnapshot.docs.length){
this.places$next(列表);
}否则{
querySnapshot.docs.forEach(doc=>{
让地点=新地点();
地点=doc.data()作为地点;
列表.推(位);
if(list.length==querySnapshot.docs.length){
this.places$next(列表);
}
});
}
});

就是这样,诺伯特。现在我明白我错过了什么!再简单不过了。一切都是对的,但我用错误的方式使用了SubjectBeahviour,在我的头脑中造成了混乱。谢谢