RxJS: Operator exhaustMap

Opublikowano: 08.11.2022 - tagi: JavaScript RxJS Operator

Do czego służy exhaustMap?

Operator exhaustMap pobiera dane z podanego źródła typu Observable. Ignoruje odbiór kolejnych danych do momentu, gdy dane z aktualnego źródła zostaną pobrane.

Przykład użycia exhaustMap

import { fromEvent, of } from 'rxjs';
import { exhaustMap, delay, map } from 'rxjs/operators';

const click$ = fromEvent(document, 'click');

click$.pipe(
    exhaustMap((event) => of(event).pipe(
        map(event => ({
          x: event.clientX,
          y: event.clientY
        })),
        delay(1000)
    )),
).subscribe(console.log)

Kliknij szybko kilka razy gdziekolwiek na stronie. Zostanie odebrany tylko jeden sygnał. Dlaczego? Ponieważ tak jak napisałem wyżej exhaustMap czeka na zakończenie aktualnej emisji danych. Dopiero po odebraniu danych pobierze następne.

exhaustMap jest podobony do operatora concatMap. Podmień w tym przykładzie exhaustMap na concatMap, żeby zobaczyć różnicę między nimi.