windowCount<T>(windowSize: number, startWindowEvery: number = 0): OperatorFunction<T, Observable<T>>
| windowSize | El máximo número de valores de cada ventana. |
| startWindowEvery | Opcional. El valor por defecto es 0.
El intervalo que señala cuándo abrir una ventana nueva. Por ejemplo, si `startWindowEvery` tiene un valor de 2, se abrirá una nueva ventana cada 2 valores emitidos por la fuente. Por defecto, al comienzo de la fuente se abre una nueva ventana.
|
OperatorFunction<T, Observable<T>>: Un Observable de ventanas, que son Observables de valores.
Es como bufferCount, pero emite un Observable anidado en lugar de un array.
Retorna un Observable que emite ventanas de elementos que recoge del Observable fuente. El Observable resultante emite ventanas cada startWindowEvery número de elementos, que contengan no más de windowSize elementos. Cuando el Observable fuente se complete o lance un error, el Observable resultante emitirá la ventana actual y propagará la notificación del Observable fuente. Si no se proporciona el parámetro startWindowEvery, se abrirá una nueva inmediatamente después de emitir la ventana anterior.
Recoge un máximo de cuatro teclas pulsadas en una ventana
Cada ventana se emite cuando haya recogido cuatro valores.
import { fromEvent } from "rxjs";
import { windowCount, tap, mergeAll, map } from "rxjs/operators";
const key$ = fromEvent<KeyboardEvent>(document, "keydown");
key$
.pipe(
map(({ code }) => code),
windowCount(4),
tap((_) => console.log("Nueva Ventana")),
// Transformando el Observable de orden superior en uno de primer orden
mergeAll()
)
.subscribe(console.log);
// Salida: Nueva Ventana, KeyR, KeyX, KeyJ, KeyS, Nueva Ventana, KeyO...
Ignorar cada 3er evento click, comenzando a partir del primero
import { fromEvent } from "rxjs";
import { windowCount, map, mergeAll, skip } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const result = clicks.pipe(
windowCount(3),
map((win) => win.pipe(skip(1))), // saltar el primero de cada 3 clicks
mergeAll() // 'Aplastar' el Observable de Observables
);
result.subscribe((x) => console.log(x));
Ignorar cada 3er evento click, comenzando a partir del tercero
import { fromEvent } from "rxjs";
import { windowCount, mergeAll } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const result = clicks.pipe(
windowCount(2, 3),
mergeAll() // 'Aplastar' el Observable de Observables
);
result.subscribe((x) => console.log(x));
Documentación oficial en inglés