зернокомбинацияПоследние срабатывает только в первый раз

У меня есть следующий блок кода в моем ngOnInit как ngOnInit ниже:

this.subscriptions = this.formService.getFormFromApi(this.formId)
      .pipe(
        concatMap(theForm => this.formService.getFormStructure(theForm))
      ).pipe(
        take(1),
        tap(tree => { this.treeNodeData = tree; }),
        (finalize(() => this.isTreeLoading = false))
      ).subscribe();
...
    this.subscriptions.add(
      combineLatest(
        this.fileService.getFiles(this.formId),        
        this.formService.questionsList
      ).pipe(
        tap(arrResult => {
          this.fileData = arrResult[0];          
          this.test = arrResult[1];
          console.log("fired.")
        })
      ).subscribe()
    );
...

Идея как ниже:
Когда определение столбца изменяется в соответствии с определением questionsList , я хочу перерисовать таблицу. Я планирую сделать это, снова получив файлы (не беспокойтесь о повторном вызове http. Когда это сработает, я заменю логику чем-то более эффективным)

Однако даже когда BehaviorSubject изменяет значения (столбцы для отображения в таблице), результат не обновляется. По сути, «срабатывает» не запускается после первой загрузки страницы.

Почему это происходит? Это потому, что вызов http завершен, а список questionsList не завершен? У меня было представление о том, что combineLatest будет срабатывать до тех пор, пока один из наблюдаемых что-то излучает?

Всего 1 ответ


Я решил это. После удаления this.subscriptions.add() он работает как положено.

// this.subscriptions.add(
      combineLatest(
        this.fileService.getFiles(this.formId),        
        this.formService.questionsList
      ).pipe(
        tap(arrResult => {
          this.fileData = arrResult[0];          
          this.test = arrResult[1];
          console.log("fired.")
        })
      ).subscribe()
   // );

Если некоторые rxjs-гуру могут объяснить это явление, пожалуйста, добавьте или отредактируйте этот ответ.


Есть идеи?

10000