Skip to content

zip - accoppia valori corrispondenti

zip è una Funzione di Creazione che raggruppa insieme i valori ordinati corrispondenti emessi da più Observable e li emette come array o tupla. Aspetta che i valori arrivino da tutti gli Observable sorgente, uno alla volta, e crea coppie quando sono pronti.

Sintassi base e utilizzo

ts
import { zip, of, interval } from 'rxjs';
import { map, take } from 'rxjs';

const source1$ = of('A', 'B', 'C');
const source2$ = interval(1000).pipe(
  map((val) => val * 10),
  take(3)
);

zip(source1$, source2$).subscribe(([letter, number]) => {
  console.log(letter, number);
});

// Output:
// A 0
// B 10
// C 20
  • Quando ogni Observable emette un valore alla volta, viene creata e emessa una coppia.
  • Se uno è in ritardo, aspetterà finché entrambi non sono allineati.

🌐 Documentazione Ufficiale RxJS - zip

Pattern di utilizzo tipici

  • Mappare richieste a risposte
  • Accoppiare sincronicamente ID con dati corrispondenti
  • Combinare stream multipli elaborati in parallelo in un singolo set

Esempi di codice pratici (con UI)

Esempio di combinazione e visualizzazione di sorgenti dati diverse (frutta e prezzo).

ts
import { zip, of, interval } from 'rxjs';
import { map, take } from 'rxjs';

// Crea area di output
const output = document.createElement('div');
output.innerHTML = '<h3>Esempio pratico zip:</h3>';
document.body.appendChild(output);

// Stream nomi frutta
const fruits$ = of('🍎 Mela', '🍌 Banana', '🍇 Uva');

// Stream prezzi (emesso ogni 2 secondi)
const prices$ = interval(2000).pipe(
  map((i) => [100, 200, 300][i]),
  take(3)
);

// zip e visualizza
zip(fruits$, prices$).subscribe(([fruit, price]) => {
  const item = document.createElement('div');
  item.textContent = `${fruit} - €${price}`;
  output.appendChild(item);
});
  • Le liste di frutta e prezzi vengono accoppiate e visualizzate quando sono allineate in corrispondenza uno a uno.
  • Se uno manca, non verrà emesso a quel punto.

Operatori Correlati

  • zipWith - Versione Pipeable Operator (usata in pipeline)
  • combineLatest - Funzione di Creazione per combinare ultimi valori
  • withLatestFrom - solo lo stream principale attiva

Pubblicato sotto licenza CC-BY-4.0.