代码之家  ›  专栏  ›  技术社区  ›  Kyle Abens

角度添加地图内的可观察结果

  •  0
  • Kyle Abens  · 技术社区  · 6 年前

    目前,我的服务中有一个方法,可以从Firebase(Firestore)检索集合并将其作为可观察对象返回。

    getInstallers(): Observable<any[]> {
        const installersCollection = this.afs.collection<Installer>('installers');
        return installersCollection.snapshotChanges().map(installers => {
          return installers.map(i => {
            const data = i.payload.doc.data() as Installer;
            const id = i.payload.doc.id;
            return { id, ...data };
          });
        });
      }
    

    我有另一个方法,它利用google places api,并在将place\u id传递给一个地方时返回一个可观察的地方。我不打算全部包括在内,因为它有点长,只知道它返回一个可观察的google place对象。

    getPlaceDetails(placeId): Observable<any>
    

    我想做的是这样的。。。

    getInstallers(): Observable<any[]> {
        const installersCollection = this.afs.collection<Installer>('installers');
        return installersCollection.snapshotChanges().map(installers => {
          return installers.map(i => {
            const data = i.payload.doc.data() as Installer;
            const id = i.payload.doc.id;
            this.getPlaceDetails(data.placeId).subscribe(place => {
              return { id, ...data, ...place }
            });
          });
        });
      }
    

    但是,这会导致该方法返回void。我正试图找到一种方法,将从getPlaceDetails中接收到的可观察数据添加到从firebase集合映射的数据中。谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Oleksandr Poshtaruk    6 年前

    使用swtchMap

    getInstallers() : Observable<any[]> {
         const installersCollection = this.afs.collection<Installer>  ('installers');
         return installersCollection.snapshotChanges().switchMap(installers => {
            let arrayOfObservables = installers.map(i => {
             const data = i.payload.doc.data() as Installer;
             const id = i.payload.doc.id;
             return this.getPlaceDetails(data.placeId).map(place => {
                return { id, ...data, ...place }
             });
            });
            return Observable.forkJoin(arrayOfObservables);
         });
       }
    

    在另一个地方叫它:

     this.getInstallers().subscribe(data => {
       // here we have resukt
     })