Rx JS - использовать оператор при условии - PullRequest
0 голосов
/ 31 марта 2020

Я получаю некоторые данные из API и хочу получить их, используя rx js .pipe. То, что я хочу сделать, это применить фильтр, если какая-то переменная имеет значение true.
Вот мой рабочий код: (UserService возвращает ответ API)

TS

this.filteredOptions =  this.userService
  .getUserSuggestions(this.displayName, 30)
  .pipe(
    map(response => response.filter(option => option.eMail != null)),
    debounceTime(400),
    distinctUntilChanged()
  );

Хочу, чтобы я хотел сейчас применить фильтр, только если некоторые переменная, которую я установил выше, является истинной Я пробовал кое-что с iif (), но, насколько я понимаю, iif () нельзя использовать для применения разных операторов.

Привет!

Решено!

map(response => this.someVariable ? response : response.filter(option => option.eMail != null)),

Используйте переменную внутри оператора карты. Спасибо @ Flix

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Вы можете просто добавить условие переменной на карту, например так:

this.filteredOptions =  this.userService
  .getUserSuggestions(this.displayName, 30)
  .pipe(
    map(response => someVariable ? response.filter(option => option.eMail != null) : response),
    debounceTime(400),
    distinctUntilChanged()
  );
1 голос
/ 31 марта 2020

Просто используйте оператор filter:

https://www.learnrxjs.io/learn-rxjs/operators/filtering/filter.

.pipe(filter(conditionFn))

0 голосов
/ 31 марта 2020

Используйте filter как показано ниже:

this.filteredOptions =  this.userService
  .getUserSuggestions(this.displayName, 30)
  .pipe(
    filter(response => response.filter(option => option.eMail != null)),
    debounceTime(400),
    distinctUntilChanged()
  );

...