首页 文章

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

提问于
浏览
0

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

但是,使用我的最新代码,似乎当我更新Firebase数据库中的数据时,它只会更新一次observable . 之后,UI不会更新,我必须刷新页面才能从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

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

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

相关问题