switchMap
Proyecta cada emisión de la fuente a un Observable que se une al Observable resultante, emitiendo únicamente los valores de Observable proyectado más reciente
Descripción
Proyecta cada valor a un Observable interno, y 'aplasta' estos Observables internos.

Retorna un Observable que emite elementos tras aplicar una función a cada elemento emitido por el Observable fuente. Dicha función retorna un Observable interno. Cada vez que switchMap observa uno de estos Observables internos, el Observable resultante comienza a emitir los elementos de ese Observable interno. Cuando se emite un Observable interno nuevo, switchMap inmediatamente deja de emitir los elementos del Observable interno anterior, y comienza a emitir los elementos del nuevo. Este comportamiento se mantiene para todos los Observables internos posteriores.
Ejemplos
Cada vez que se pulsa el botón, se hace una nueva petición, cancelando la petición anterior
import { fromEvent } from "rxjs";
import { delay, mergeAll, switchMap } from "rxjs/operators";
import { ajax } from "rxjs/ajax";
const click$ =
fromEvent < MouseEvent > (document.getElementById("ghibliButton"), "click");
function getGhibliFilms() {
return ajax
.getJSON("https://ghibliapi.herokuapp.com/films")
.pipe(mergeAll(), delay(2000));
}
click$.pipe(switchMap((_) => getGhibliFilms())).subscribe(console.log);
// Salida: (Click) (Se hace nueva petición) (Click) (Se hace nueva petición)...Ejemplo de la documentación oficial
Generar un Observable nuevo según los valores del Observable fuente
Reiniciar un Observable intervalo con cada click
Recursos adicionales
Last updated