Skip to content

bufferTime - Emetti Valori Raccolti a Intervalli Regolari

L'operatore bufferTime emette un array di valori a intervalli di tempo specificati. Questo è utile quando vuoi separare lo stream per una certa quantità di tempo e trattarlo come un processo batch.

🔰 Sintassi e Utilizzo Base

ts
import { interval } from 'rxjs';
import { bufferTime } from 'rxjs';

// Emetti valori ogni 100ms
const source$ = interval(100);

source$.pipe(
  bufferTime(1000)
).subscribe(buffer => {
  console.log('Valori raccolti in 1 secondo:', buffer);
});

// Esempio di output:
// Valori raccolti in 1 secondo: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// Valori raccolti in 1 secondo: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
// ...
  • I valori emessi in un secondo vengono raggruppati in un array ed emessi in sequenza.

🌐 Documentazione Ufficiale RxJS - bufferTime

💡 Pattern di Utilizzo Tipici

  • Invio batch a intervalli regolari
  • Elaborare operazioni utente in batch (es. operazioni di drag)
  • Raccogliere dati da sensori e dispositivi IoT
  • Riduzione e compressione di informazioni di log e trace

🧠 Esempio di Codice Pratico (con UI)

Bufferizza gli eventi click per 1 secondo ed emettili insieme ogni secondo.

ts
import { fromEvent } from 'rxjs';
import { bufferTime } from 'rxjs';

// Crea area di output
const output = document.createElement('div');
output.style.marginTop = '10px';
document.body.appendChild(output);

// Stream eventi click
const clicks$ = fromEvent(document, 'click');

clicks$.pipe(
  bufferTime(1000)
).subscribe(clickArray => {
  const message = `Click in 1 secondo: ${clickArray.length}`;
  console.log(message);
  output.textContent = message;
});
  • Il numero di click al secondo viene visualizzato come riepilogo.
  • Il processo di buffering ti permette di gestire insieme le occorrenze successive di eventi.

Pubblicato sotto licenza CC-BY-4.0.