@kolyalesha

Rxjs switchMap, почему сколько subscribe столько и запросов?

query() {
    сonsole.log('query');
}

let search$ = new BehaviorSubject('');
let x = search$
       .distinctUntilChanged()
       .do(() => console.log('search called!'))
       .mergeMap(() => query());
x.subscribe(data => console.log('data'));
x.subscribe(data => console.log('data'));
x.subscribe(data => console.log('data'));
x.subscribe(data => console.log('data'));

query
data
query
data
query
data
query
data


Затем если изменияется поиск
search$.next('asd');
Снова выводит

query
data
query
data
query
data
query
data

Проблема в том, что каждый раз летит 4 запроса (сколько subscribe столько и запросов)
Как сделать так, что бы при изменении search$ метод query() вызывался ОДИН раз и отрабатывали все коллбеки?
  • Вопрос задан
  • 780 просмотров
Решения вопроса 1
navix
@navix
Angular & TypeScript
Для каждого subscribe отрабатывает вся цепочка, такое вот поведение.

Быстрое решение:
let x = search$
       .distinctUntilChanged()
       .do(() => console.log('search called!'))
       .mergeMap(() => query())
       .shareReplay(1);


Полезное чтиво, чтобы разобраться с холодными и горячими Observable: https://medium.com/@benlesh/hot-vs-cold-observable...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы