如何使用FirebaseObjectObservables

时间:2017-04-26 10:54:15

标签: firebase rxjs angularfire2 angular2-observables

我有一个带有ID的FirebaseListObservable,我想使用FirebaseObjectObservable查找它们并创建一个结果数组,但我真的不明白该怎么做。

  this.af.database.list('/favourites/'+ this.userId)
  .flatMap(favouriteId => {
    return this.af.database.object('/dhs/en/'+favouriteId.$value)
  })
  .subscribe(favourite => {
    console.log("favourite", favourite);
  });

这不起作用,因为favouriteId。$ value未定义。这样做的正确方法是什么?

这是一个相关的问题:How to merge an observable that is a property of another observable

编辑:我创建了一个丑陋的临时解决方案

  getAllFavourites(): Observable<any> {
    return Observable.create(observer => {
      var resArray = [];
      this.af.database.list('/favourites/'+ this.userId)
      .subscribe(favouriteArray => {
        favouriteArray.forEach((favouriteId) => {
          this.secretProvider.getDay(favouriteId.$value)`
          .subscribe(favourite => {
            resArray.push(favourite);
            observer.next(resArray);
          });
        })
      })
    })
  }

显然,这不是可观察对象的目的,此外,例如从favourite ID中删除了this.af.database.list('/favourites/'+ this.userId)时,生成的可观察数组未正确更新。

更新:我找到了一个更好的解决方案:How to move FirebaseObjectObservable into a FirebaseListObservable

getAllFavourites(): Observable<any> {
      return this.af.database.list('/favourites/'+ this.userId)
      .map((favourites)=>{
        return favourites.map((favourite) => {
          favourite = this.secretProvider.getDay(favourite.$value)
          return favourite;
        })
      });
  }

(在HTML中使用嵌套的异步varibale,如其他线程中所述)

我仍然认为必须有更好的解决方案。使用mergeMap或类似的东西,并避免嵌套的asyncs。

0 个答案:

没有答案