代码之家  ›  专栏  ›  技术社区  ›  Jordan Lewallen

RxJS combinetest在更新可观测数据后没有正确发射

  •  1
  • Jordan Lewallen  · 技术社区  · 6 年前

    我有以下RXJ combineLatest 等待从我的Firebase Firestore返回三个对象(user、artist、release),我将其合并并展平为一个对象数组:

    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数组的日志时,在新的 释放数组 . 为什么这个对象数组中没有返回release对象呢?

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

    enter image description here

    当我进入Firestore并直接更新对象的一个属性时,observate会按原样返回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 回复  |  直到 6 年前
        1
  •  1
  •   Jordan Lewallen    6 年前

    只是我太笨了,当我提交带有更新的页面时,发布id和更新的内容都被更新了,所以observable找不到它最初的任务是什么。。。。

    我补充道:

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

    如果已经存在的话,这就需要更新更新。