RxJS: Operator mergeMap
Opublikowano: 11.10.2022 - tagi: JavaScript RxJS Operator
Operator mergeMap służy do pobrania danych ze źródła typu Observable przekazanego do tego operatora.
Dane z podanego źródła są wysyłane natychmiast kiedy będą dostępne. To znaczy, że kolejność odbioru danych nie jest gwarantowana. Dodatkowo dane z takiego źródła są pobierane za pomocą mergeMap równocześnie.
Przykłady
Przykład 1
import { fromEvent, interval } from 'rxjs';
import { mergeMap } from 'rxjs/operators';
const interval$ = interval(1000);
const click$ = fromEvent(document, 'click');
click$
.pipe(
mergeMap((e) => interval$)
)
.subscribe(console.log);
Po kliknięci przyciskiem myszy na stronie zostanie wywołany obiekt Observable: interval$, który co sekundę emituje sygnał. Każde kolejne kliknięcie powoduje start emitowania danych z nowego źródła.
Czyli możemy osiągnąć taki wynik: 0, 1, 2 nowe kliknięcie: 3, 0, 4, 1, 5, 2 itd.
Przykład 2
import { fromEvent } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { mergeMap } from 'rxjs/operators';
const API_URL = 'https://jsonplaceholder.typicode.com/todos/';
const click$ = fromEvent(document, 'click');
click$
.pipe(
mergeMap((e) => {
const id = parseInt(Math.random() * 20) + 1;
return ajax.getJSON(`${API_URL}/${id}`);
})
)
.subscribe(console.log);
Wystarczy klikać szybko przyciskiem myszy w stronę. Dane będą pobierane w tym samym czasie, nie czekając na zakończenie poprzedniego żądania.