RxJS объединитьПоследний не излучает должным образом после обновления наблюдаемого - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий RxJS combineLatest, который ждет, пока три объекта не будут возвращены из моего хранилища Firebase (пользователь, исполнитель, релиз), который я объединяю и объединяю в массив объектов:

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, но когда пользователь сохраняет обновления, я получаю сообщение о том, что свойство в объекте выпуска не определено.И когда я просматриваю журнал для массива релизов, в новом releaseArray возвращаются только объекты Artist и User.Почему объект release не возвращается и в этом массиве объектов?

Вот изображение, первые два оператора журнала находятся на загрузке страницы, а последние два оператора журнала отображаются, как только 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 голосов
/ 04 декабря 2018

Просто я был глуп, когда я отправлял страницу с обновлениями, обновлялся идентификатор выпуска, а также обновленный контент, так что наблюдаемое не могло найти то, для чего изначально было поставлено задачу наблюдать ...

Я добавил:

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

И он позаботился о повторном обновлении submissionUID, если он уже существовал ....

...