зернокомбинацияПередавает только первые данные - PullRequest
1 голос
/ 13 февраля 2020

У меня есть следующий блок кода в моем 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, я буду sh, чтобы повторно отобразить таблицу. Я планирую сделать это, снова получив файлы (не беспокойтесь о повторном вызове http. Когда это сработает, я заменю logi c на что-то более эффективное)

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

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

1 Ответ

0 голосов
/ 13 февраля 2020

Я решил это. После удаления 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()
   // );

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

...