description |
---|
Acumula valores del Observable fuente a partir de una emisión de openings en un búfer, que se cierra cuando el Observable retornado por la función closingSelector emite |
Signatura
bufferToggle<T, O>(openings: SubscribableOrPromise<O>, closingSelector: (value: O) => SubscribableOrPromise<any>): OperatorFunction<T, T[]>
OperatorFunction<T, T[]>
: Un Observable de arrays de valores almacenados.
Almacena valores en un array. Abre el búfer cuando openings
emite, y llama a la función closingSelector
para obtener el Observable que indica cuándo cerrar el búfer.
Almacena valores del Observable fuente abriendo el búfer cuando el Observable openings
lo indica, cerrando dicho búfer y emitiéndolo cuando el Subscribable
o la Promise
retornados por la función closingSelector
emiten.
Abrir el búfer cada cuatro segundos, durante dos segundos
import { fromEvent, interval } from "rxjs";
import { bufferToggle } from "rxjs/operators";
const number$ = interval(1000);
number$
.pipe(bufferToggle(interval(4000), (_) => interval(2000)))
.subscribe(console.log);
// Salida: [3, 4], [7, 8], [11, 12]...
Emitir eventos MouseEvent mientras esté pulsado el botón del mouse, hasta que dejemos de pulsarlo
import { fromEvent } from "rxjs";
import { bufferToggle } from "rxjs/operators";
const mouse$ = fromEvent<MouseEvent>(document, "mousemove");
mouse$
.pipe(
bufferToggle(fromEvent(document, "mousedown"), (_) =>
fromEvent(document, "mouseup")
)
)
.subscribe(console.log);
// Salida: [MouseEvent, MouseEvent, MouseEvent, MouseEvent]...
Cada dos segundos, emite los eventos click de los siguientes 500 milisegundos
import { fromEvent, interval, EMPTY } from "rxjs";
import { bufferToggle } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const openings = interval(1000);
const buffered = clicks.pipe(
bufferToggle(openings, (i) => (i % 2 ? interval(500) : EMPTY))
);
buffered.subscribe((x) => console.log(x));