отправьте действие ngxs в switchMap, игнорируя возвращаемое значение - PullRequest
0 голосов
/ 30 апреля 2020

Должен быть стандартный способ решить эту проблему, но я еще ничего не нашел. Я, вероятно, неправильно формулирую свой поиск.

У меня есть поле ввода поиска, и, как правило, я использую оператор switchmap для отмены предыдущих запросов http, когда пользователь продолжает вводить текст.

Я основал это на примере в документации ngxs:

this.actions$
  .pipe(
    ofActionDispatched(SomeAction),
    debounceTime(2000),
    distinctUntilChanged(),
    untilDestroyed(this),
    switchMap(() => {
      return this.store.dispatch(new SomeOtherAction());
    })
  ).subscribe(() => {
});

SomeAction отправляется каждый раз, когда пользователь вводит что-то в поле ввода и сохраняет в хранилище (это почему SomeOtherAction не имеет параметра конструктора).

Есть ли лучший способ сделать это без этого пустого блока подписки? Это выглядит как анти-шаблон.

1 Ответ

0 голосов
/ 30 апреля 2020

Другим способом, который вы могли бы рассмотреть, является отправка действия для изменения searchText в состоянии после того, как вы debounce et c.

Использование valueChanges Наблюдаемого в форме ввода поиска контролировать, что вы могли бы передать debounce/distinct/filter или любую комбинацию, соответствующую вашим целям, прежде чем вызывать store.dispatch с вашим действием для изменения состояния.

Тогда вы будете изменять состояние только минимальное требуемое время, а не каждое нажатие клавиши, а также вызывать оттуда HTTP-запрос (и я не думаю, что вам понадобится подписка на поток действий в компоненте ).

Доку для Angular Форма valueChanges здесь

...