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