repeatWhen
Repite o no una secuencia Observable en función de un Observable de notificaciones
Descripción
Retorna un Observable que refleja el Observable fuente con la excepción de un evento complete
. Si el Observable fuente hace una llamada complete
, repeatWhen
emitirá al Observable retornado por el notificador. Si ese Observable hace una llamada complete
o error
, entonces este método hará una llamada complete
o error
en la suscripción hija. Si no, repeatWhen
volverá a suscribirse al Observable fuente.
Ejemplos
Repetir una secuencia de números con cada click
import { repeatWhen } from "rxjs/operators";
import { fromEvent, range } from "rxjs";
const click$ = fromEvent < MouseEvent > (document, "click");
const number$ = range(1, 3);
number$.pipe(repeatWhen(() => click$)).subscribe(console.log);
// Salida: 1, 2, 3 (click) 1, 2, 3
Suscribirse al Observable fuente con cada click, desencadenando una nueva petición AJAX con un id aleatorio
import { repeatWhen, map } from "rxjs/operators";
import { ajax } from "rxjs/ajax";
import { fromEvent, defer } from "rxjs";
const ids = [
"58611129-2dbc-4a81-a72f-77ddfc1b1b49",
"2baf70d1-42bb-4437-b551-e5fed5a87abe",
];
function getRandomId() {
return ids[Math.floor(Math.random() * ids.length)];
}
const click$ = fromEvent<MouseEvent>(document, "click");
defer(() =>
ajax.getJSON(`https://ghibliapi.herokuapp.com/films/${getRandomId()}`)
)
.pipe(
map(({ title }) => title),
repeatWhen(() => click$)
)
.subscribe(console.log);
// Salida: (click) Castle in the Sky (click) My Neighbor Totoro (click) My Neighbor Totoro...
Ejemplo de la documentación oficial
Repetir un flujo de mensajes con cada click
import { of, fromEvent } from "rxjs";
import { repeatWhen } from "rxjs/operators";
const source = of("Repeat message");
const documentClick$ = fromEvent(document, "click");
source
.pipe(repeatWhen(() => documentClick$))
.subscribe((data) => console.log(data));
Recursos adicionales
Last updated