Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何从Firebase';消防商店? 背景_Firebase_Rxjs_Google Cloud Firestore_Observable - Fatal编程技术网

我们如何从Firebase';消防商店? 背景

我们如何从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

通过AngularFire从Firebase的FireStore获取数据的大多数示例:

(a) 显示如何使用
可观察
获取数据:

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)