Как я могу получить значение из текущего потока в RxJS? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть this.selectedFilters$ - это значение должно быть изменено, когда this.filter$ (инициализация) или this.newFilter$ испускают любое значение.Вот почему я использовал слияние.

Поэтому, когда this.newFilter$ испускает любое значение, мне нужно обновить CURRENT OBJECT на основе данных из this.newFilter$.Однако я понятия не имею, как я могу правильно получить это текущее значение из this.selectedFilters$ Я пытался использовать withLatestFrom(this.selectedFilters$), но компилятор не будет работать, поскольку в начале this.selectedFilters$ просто пустой до инициализации.

Пока что я решил это, сохранив текущее значение в локальной переменной this.currentFilters, используя tap() - но я знаю, что это плохая практика, по крайней мере, пока это работает ... Как я могу решить это лучше?

  this.selectedFilters$ = merge(
      this.filter$.pipe(
        switchMap((allFilters) => {
          return of({
            itemId: allFilters[0].itemId,
            filterOptions: this.getDefaultFilterOptions(allFilters)
          });
        }),
      ),
      this.newFilter$.pipe(
        switchMap((newFilter: FilterOption) => {
          return of(this.getNewFilterOptions(newFilter, this.currentFilters));
        }),
      )
    ).pipe(tap((filters) => this.currentFilters = filters));
  }

  // LESS IMPORTANT CODE BELOW...

  private getNewFilterOptions(newFilter: FilterOption, currentFilters: ItemFilter): ItemFilter {
    const changedFilter = currentFilters.filterOptions.findIndex(f => f.filterId === newFilter.filterId);
    currentFilters.filterOptions[changedFilter] = newFilter;

    return currentFilters;
  }

  private getDefaultFilterOptions(filters: ItemFilter[]): FilterOption[] {
    return filters.reduce((acc, item) => acc.concat(item.filterOptions[0]), []);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...