RxJS наблюдает за массивом и отменяет запросы на изменение - PullRequest
0 голосов
/ 22 апреля 2019

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

const source$ = from(selected);
source$.pipe(
  debounceTime(1000),
  switchMap(() => {
    if(selected.length > 1) {
      const formatted = selected.map(s => s.id);
      fetch(`${url}/getParams`, {
        method: 'POST',
        body: JSON.stringify({ formatted })
      }).then(response => toCompare(response.json()));
    }
  })
);

Обратите внимание, что выбран мой массив, и я не делаю push / pop, но я переписываю массив полностью, но использую useStateот React Hooks.

1 Ответ

0 голосов
/ 22 апреля 2019

По умолчанию Rx.js не запускает потоки, пока к нему не подключен хотя бы один прослушиватель.

Чтобы добавить прослушиватель, для всех потоков есть метод subscribe

const source$ = from(selected);
source$.pipe(
  debounceTime(1000),
)
.subscribe(() => {
  if(selected.length > 1) {
    const formatted = selected.map(s => s.id);
    fetch(`${url}/getParams`, {
      method: 'POST',
      body: JSON.stringify({ formatted })
    }).then(response => toCompare(response.json()));
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...