Firebase在Ionic 2 / Angular 2项目中组合了Observables - 它们只更新一次

时间:2016-11-15 03:42:34

标签: angular firebase firebase-realtime-database ionic2

我有一个Ionic 2项目,我使用Firebase,并且我一直在努力掌握利用可观察对象创建多对多关系的艺术。在我之前的一些问题中,我已经取得了一些进展,我可以将单独的路径聚合成一个可观察的路径。

但是,使用我的最新代码,似乎当我更新Firebase数据库中的数据时,它只会更新一次observable。之后,用户界面不会更新,我必须刷新页面才能从Firebase数据库中提取最新数据。

这是我的功能:

public getUserProfile(data) {
    return this._af.database
      .object(`/social/users/${data.id}`)

      // Switch to the joined observable

      .switchMap((user) => {

        let vidKeys = Object.keys(user.videos);


        return Observable.combineLatest(
          vidKeys.map((vidKey) => this._af.database
            .object(`/social/videos/${vidKey}`)
          ),
          (...videos) => {
            vidKeys.forEach((vidKey, index) => { user.videos[vidKey] = videos[index] });
            return user;
          }
        );
      });
  }

更新:添加调用此函数的代码。

在我的组件中:

ionViewDidLoad() {

    this._users.getUserProfile({id: 'c25zdGFyb3NjJJuYtREaYWlsLmNvbQ=='}).subscribe(success => {
      this.user = success;

      this.videoKeys = Object.keys(this.user.videos);
    });

  }

在我的模板中:

<div *ngFor="let key of videoKeys">
        {{user.videos[key].title}}
        <img src="{{user.videos[key].thumbnail}}" />
      </div>

以下是我的用户的数据库对象:

{
    users: {
     c25zdGFyb3NjJJuYtREaYWlsLmNvbQ==
       videos {
         AFA-rOls8YA: true,
         AlLsp4gnyDQ: true,
         dX_1B0w7Hzc: true,
         ik5qR5bw75E: true,
         njos57IJf-0: true
       },
       videos {
         AFA-rOls8YA {
           attached_members {
             c25zdGFyb3NjJJuYtREaYWlsLmNvbQ==: true
           }
           title: "Hello...it's me"
         },
         AlLsp4gnyDQ: { ... },
         dX_1B0w7Hzc: { ... },
        }
      }
    }
}

此问题是我之前提问here的延伸。

我对可观察者来说还是比较新的,但是有人认为他们知道这里会发生什么吗?

1 个答案:

答案 0 :(得分:0)

好的,经过一些试验和错误后我意识到发布的代码或我之前的回答没有任何问题。我的代码中出现了一个错误,我在测试期间没有收到错误。我评论了问题代码,并且正如预期的那样,更新一直在发生。

这是一个教训,您可以将自上次工作以来预期工作的代码翻两番。