我们如何从Firebase';消防商店? 背景
通过AngularFire从Firebase的FireStore获取数据的大多数示例: (a) 显示如何使用我们如何从Firebase';消防商店? 背景,firebase,rxjs,google-cloud-firestore,observable,Firebase,Rxjs,Google Cloud Firestore,Observable,通过AngularFire从Firebase的FireStore获取数据的大多数示例: (a) 显示如何使用可观察获取数据: export class AppComponent { items: Observable<any[]>; constructor(db: AngularFirestore) { this.items = db.collection('items').valueChanges(); } } 处境 我没有看到如何简单地获取数据:SomeMo
可观察
获取数据:
export class AppComponent {
items: Observable<any[]>;
constructor(db: AngularFirestore) {
this.items = db.collection('items').valueChanges();
}
}
处境
我没有看到如何简单地获取数据:SomeModel[]
而不是数据:Observable
。。。经过一番挣扎,我找到了一个解决办法:
async getData(): Promise<SomeModel[]> {
return await new Promise((resolve, reject) => {
this.myCollection.snapshotChanges().subscribe(data => {
this.data = data.map(e => {
return {
id: e.payload.doc.id,
...e.payload.doc.data()
};
});
resolve(this.data);
});
});
}
async getData():Promise{
返回等待新承诺((解决、拒绝)=>{
this.myCollection.snapshotChanges().subscribe(数据=>{
this.data=data.map(e=>{
返回{
id:e.payload.doc.id,
…e.payload.doc.data()
};
});
解析(此数据);
});
});
}
问题:
但是作为这个领域的新手,我的解决方案让人觉得很做作,我正在寻找如何以最好的方式做到这一点。谢谢你抽出时间 您应该使用异步管道而不是设置实例属性,因为异步管道处理onDestory上的取消订阅。但是如果您真的想将结果分配给属性,只需在subscribe()中分配它
getModel():可观察{
this.myCollection.snapshotChanges().map((数据)=>{
返回this.data=data.map(e=>{
返回{
id:e.payload.doc.id,
…e.payload.doc.data()
};
});
});
}
this.getModel().subscribe(数据=>this.data=data)
async getData(): Promise<SomeModel[]> {
return await new Promise((resolve, reject) => {
this.myCollection.snapshotChanges().subscribe(data => {
this.data = data.map(e => {
return {
id: e.payload.doc.id,
...e.payload.doc.data()
};
});
resolve(this.data);
});
});
}
getModel():Observable<MyModel[]>{
this.myCollection.snapshotChanges().map((data) => {
return this.data = data.map(e => {
return {
id: e.payload.doc.id,
...e.payload.doc.data()
};
});
});
}
this.getModel().subscribe(data=>this.data=data)