buffer

Almacena los valores del Observable en un búfer hasta que otro Observable emita

Signatura

Firma

buffer<T>(closingNotifier: Observable<any>): OperatorFunction<T, T[]>

Parámetros

Retorna

OperatorFunction<T, T[]>: Un Observable de búferes, que son arrays de valores.

Descripción

Acumula valores en un array, y emite dicho array cuando un segundo Observable emita.

Almacena los valores del Observable fuente en un búfer hasta que el Observable closingNotifier emita un valor, en cuyo momento se emite el búfer en el Observable resultante, y se abre un búfer nuevo internamente, esperando a la próxima emisión de closingNotifier.

Ejemplos

Con cada tecla pulsada, emitir el array de los números emitidos desde la última tecla pulsada

StackBlitz

import { buffer } from "rxjs/operators";
import { interval, fromEvent } from "rxjs";

const number$ = interval(1000);
const key$ = fromEvent(document, "keydown");

number$.pipe(buffer(key$)).subscribe(console.log);
// Salida: (tecla pulsada) [0, 1, 2, 3] (tecla pulsada) [4, 5]

Emitir los clicks hechos en un intervalo de 5 segundos

Si no se hace ningún click en el intervalo, no se emitirá nada.

StackBlitz

import { buffer, filter } from "rxjs/operators";
import { interval, fromEvent } from "rxjs";

const click$ = fromEvent(document, "click");
const clickInterval$ = interval(5000);

click$
  .pipe(
    buffer(clickInterval$),
    filter(({ length }) => length > 0)
  )
  .subscribe(console.log);
// Output: (5s) [MouseEvent, MouseEvent] (5s) [MouseEvent]

Ejemplos de la documentación oficial

Emite el array de eventos almacenados en cada click

import { fromEvent, interval } from "rxjs";
import { buffer } from "rxjs/operators";

const clicks = fromEvent(document, "click");
const intervalEvents = interval(1000);
const buffered = intervalEvents.pipe(buffer(clicks));
buffered.subscribe((x) => console.log(x));

Recursos adicionales

Documentación oficial en inglés

Last updated