windowTime(windowTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>
| windowTimeSpan | La cantidad de tiempo que cada ventana se mantiene abierta. |
| scheduler | Opcional. El valor por defecto es undefined.
El planificador con el que planificar los intervalos que determinan los límites de cada ventana. |
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));
windowTime(windowTimeSpan: number, windowCreationInterval: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>
| windowTimeSpan | Tipo: number. |
| windowCreationInterval | Tipo: number. |
| scheduler | Opcional. El valor por defecto es undefined.
Tipo: SchedulerLike. |
OperatorFunction<T, Observable<T>>
windowTime(windowTimeSpan: number, windowCreationInterval: number, maxWindowSize: number, scheduler?: SchedulerLike): OperatorFunction<T, Observable<T>>
| windowTimeSpan | Tipo: number. |
| windowCreationInterval | Tipo: number. |
| maxWindowSize | Tipo: number. |
| scheduler | Opcional. El valor por defecto es undefined.
Tipo: SchedulerLike. |
OperatorFunction<T, Observable<T>>
Documentación oficial en inglés