description |
---|
Almacena valores y utiliza una función factoría de Observables para determinar cuándo cerrar, emitir y reiniciar el búfer |
Signatura
bufferWhen<T>(closingSelector: () => Observable<any>): OperatorFunction<T, T[]>
OperatorFunction<T, T[]>
: Un Observable de arrays de valores almacenados.
Almacena valores en un array. Cuando comienza a almacenar valores, llama a una función que retorna un Observable que indica cuándo cerrar el búfer actual y abrir uno nuevo, para seguir almacenando valores.
Abre un búfer de forma inmediata, que cierra cuando el Observable retornado por la función closingSelector
emite un valor. En cuanto se cierra un búfer, se abre uno nuevo y se repite el proceso.
Almacenar valores durante periodos de 4 segundos
import { bufferWhen } from "rxjs/operators";
import { interval } from "rxjs";
const number$ = interval(1000);
number$.pipe(bufferWhen(() => interval(4000))).subscribe(console.log);
// Salida: [0, 1, 2], [3, 4, 5, 6], [7, 8, 9, 10]...
Almacenar valores hasta que se haga click
import { bufferWhen } from "rxjs/operators";
import { interval, fromEvent } from "rxjs";
const number$ = interval(1000);
const click$ = fromEvent < MouseEvent > (document, "click");
number$.pipe(bufferWhen(() => click$)).subscribe(console.log);
// Salida: (click ) [0, 1, 2, 3, 4] (click) [5, 6]...
Emite un array de clicks cada [1-5] segundos
import { fromEvent, interval } from "rxjs";
import { bufferWhen } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const buffered = clicks.pipe(
bufferWhen(() => interval(1000 + Math.random() * 4000))
);
buffered.subscribe((x) => console.log(x));