description |
---|
Acumula valores del Observable fuente en un Observable anidado (ventana) periódicamente |
Signatura
windowTime(windowTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>
OperatorFunction<T, Observable<T>>
: Un Observable de ventanas, que son Observables de valores.
Es como bufferTime
, pero emite un Observable anidado en lugar de un array.
Retorna un Observable que emite ventanas de elementos que recoge del Observable fuente. Cada ventana se emite tras un periodo de tiempo determinado por el argumento windowTimeSpan
. 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 argumento windowCreationInterval
, el Observable resultante abrirá una nueva ventana en cuanto la ventana anterior esté completa. Con el argumento maxWindowCount
, cada ventana emitirá, como mucho, el número de valores indicado. Con el argumento windowCreationInterval
se puede determinar cuándo abrir nuevas ventanas de forma periódica.
Recoge teclas pulsadas en una nueva ventana cada 5s
import { fromEvent } from "rxjs";
import { mergeAll, map, tap, windowTime } from "rxjs/operators";
const key$ = fromEvent<KeyboardEvent>(document, "keydown");
key$
.pipe(
map(({ code }) => code),
windowTime(5000),
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 (5s) Nueva Ventana, KeyO...
Emitir como mucho 2 eventos click en ventanas de 1s
import { fromEvent } from "rxjs";
import { windowTime, map, mergeAll, take } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const result = clicks.pipe(
windowTime(1000),
map((win) => win.pipe(take(2))), // Cada ventana contiene como mucho 2 emisiones
mergeAll() // 'Aplastar' el Observable de Observables
);
result.subscribe((x) => console.log(x));
Emitir como mucho 2 eventos click en ventanas de 1s, abriendo una ventana nueva cada 5s
import { fromEvent } from "rxjs";
import { windowTime, map, mergeAll, take } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const result = clicks.pipe(
windowTime(1000, 5000),
map((win) => win.pipe(take(2))), // Cada ventana contiene como mucho 2 emisiones
mergeAll() // 'Aplastar' el Observable de Observables
);
result.subscribe((x) => console.log(x));
Igual que el ejemplo anterior, pero con maxWindowCount en lugar del operador take
import { fromEvent } from "rxjs";
import { windowTime, mergeAll } from "rxjs/operators";
const clicks = fromEvent(document, "click");
const result = clicks.pipe(
windowTime(1000, 5000, 2), // Cada ventana contiene como mucho 2 emisiones
mergeAll() // 'Aplastar' el Observable de Observables
);
result.subscribe((x) => console.log(x));
Sobrecargas
windowTime(windowTimeSpan: number, windowCreationInterval: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>
OperatorFunction<T, Observable<T>>
windowTime(windowTimeSpan: number, windowCreationInterval: number, maxWindowSize: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>
OperatorFunction<T, Observable<T>>