RxJS мешают switchMap отправлять запрос в первую очередь - PullRequest
0 голосов
/ 29 января 2019

У меня есть компонент, который подписан на событие, которое запускается несколько раз одновременно.Эта подписка запускает запрос на сервер для получения данных.Чего я хочу добиться, так это запустить только один запрос.

Вместо этого я получаю множество отмененных запросов, пока окончательный запрос не будет завершен:

enter image description here

Обновлено:

this.someObject.onEvent()
  .pipe(switchMap((filterCriterias) => this.loadData(filterCriterias)))
  .subscribe((res) => {
    this.data = res;
});

Есть ли способ сортировки для создания водосборного бассейна и запуска только последнего запроса, как на рисунке (чтобы не получать отмененные запросы в первую очередь))?

Я использую RxJs 6.3

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 января 2019
this.someObject.onEvent()
  .pipe(debounceTime(300),switchMap(() => this.loadData()))
  .subscribe((res) => {
    this.data = res;
}); 
0 голосов
/ 29 января 2019

Кажется, что вы могли бы использовать exhaustMap вместо switchMap.

exhaustMap будет игнорировать все последующие выбросы, пока не завершится внутренняя наблюдаемая.Таким образом, даже если onEvent() испускает пять раз, только первый вызовет this.loadData().Все остальные выбросы будут игнорироваться до тех пор, пока активная this.loadData() не завершится.

this.someObject.onEvent()
  .pipe(
    exhaustMap(() => this.loadData())
  )
  .subscribe((res) => ...);
...