Pobieram dane z API i chcę je pobrać za pomocą .pipe rxjs. To, co chcę zrobić, to zastosować filtr, jeśli jakaś zmienna jest prawdziwa.
Oto mój działający kod: (UserService zwraca odpowiedź API)

Rozwiązywanie problemów

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

Chcę teraz zastosować filtr tylko wtedy, gdy jakaś zmienna, którą ustawiłem powyżej, jest prawdziwa. Próbowałem kilku rzeczy z iif (), ale w moim obecnym rozumieniu iif () nie może być używany do stosowania różnych operatorów.

Pozdrowienia!

Rozwiązane!

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

Użyj zmiennej w ramach operatora mapy. Dzięki @Flix

0
KastenBrot 31 marzec 2020, 12:40

3 odpowiedzi

Najlepsza odpowiedź

Możesz po prostu dodać warunek zmiennej na mapie, na przykład:

this.filteredOptions =  this.userService
  .getUserSuggestions(this.displayName, 30)
  .pipe(
    map(response => someVariable ? response.filter(option => option.eMail != null) : response),
    debounceTime(400),
    distinctUntilChanged()
  );
1
mahalde 31 marzec 2020, 10:03

Użyj filter jak poniżej:

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

0
Shashank Vivek 31 marzec 2020, 09:52

Po prostu użyj operatora filter:

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

.pipe(filter(conditionFn))

1
A. Idris 31 marzec 2020, 10:05