更新可观察结果后,RxJS CombineLatest无法正确发射

时间:2018-12-04 05:30:08

标签: angular firebase rxjs google-cloud-firestore angularfire2

我有以下RxJS combineLatest,它等待着我的Firebase Firestore(用户,艺术家,发行版)返回三个对象,然后将它们组合并展平为一个对象数组:

combineLatest([this.release$, this.artist$, this.auth.user$]).subscribe(
  (results) => {
    console.log(results)
    this.releasePage = true;
    var releaseArray = this.helper.flattenArray(results);
    console.log(releaseArray);
  }
)

当我加载该页面并console.log releaseArray(具有展平的对象数组)时,可以看到所有3个对象。

现在这是问题所在。用户可以编辑release信息,但是当用户保存更新时,出现关于未定义发布对象中的属性的错误。当我查看release数组的日志时,新的releaseArray中仅返回artist和user对象。为什么释放对象也没有返回到该对象数组中?

这是一张图片,前两个日志语句在页面加载中,Firestore更新数据后显示最后两个日志语句,因此由于值更改而发出:

enter image description here

当我进入Firestore并直接更新对象的属性时,可观察对象将按应返回3个更新的对象。

在这里值得做的是我用来更新对象的Firestore AngularFire2更新代码:

this.db.updateAt(`submissions/${this.submission.id}`, {
        ...form.value
})

还有我的数据库服务中的updateAt方法:

  updateAt(path: string, data: Object): Promise<any> {
    const segments = path.split('/').filter(v => v);
    if (segments.length % 2) {
      // Odd is always a collection
      return this.afs.collection(path).add(data);
    } else {
      // Even is always document
      return this.afs.doc(path).set(data, { merge: true });
    }
  }

让我知道您还需要什么来帮助解决此问题,谢谢!

1 个答案:

答案 0 :(得分:1)

只是我很愚蠢,当我提交带有更新的页面时,发布ID以及更新的内容都在更新,因此可观察者无法找到最初要观察的任务。...

我添加了:

if(!this.submitForm.value.submissionUID) {
  this.submitForm.value.submissionUID = Math.random().toString(36).substring(2);
}

如果这已经存在,这将负责重新更新submitUID。