Skip to content

combineLatest - Die neuesten Werte kombinieren

combineLatest ist eine Erstellungsfunktion, die alle neuesten Werte mehrerer Observables zusammenfasst und ausgibt. Wann immer ein neuer Wert von einer der Quell-Observables ausgegeben wird, wird das Ergebnis der Kombination aller letzten Werte ausgegeben.

Grundlegende Syntax und Verwendung

ts
import { combineLatest, of } from 'rxjs';

const obs1$ = of('A', 'B', 'C');
const obs2$ = of(1, 2, 3);

combineLatest([obs1$, obs2$]).subscribe(([val1, val2]) => {
  console.log(val1, val2);
});

// Ausgabe:
// C 1
// C 2
// C 3
  • Nachdem jede Observable mindestens einen Wert ausgegeben hat, wird der kombinierte Wert ausgegeben.
  • Immer wenn ein neuer Wert auf einer der beiden Seiten eingeht, wird das letzte Paar erneut ausgegeben.

🌐 Offizielle RxJS-Dokumentation - combineLatest

Typische Nutzungsmuster

  • Echtzeit-Validierung von Formulareingaben (z.B. gleichzeitige Überwachung von Name und E-Mail-Adresse)
  • Zustandssynchronisation mehrerer Streams (z.B. Integration von Sensorwerten und Gerätestatus)
  • Datenabruf mit Abhängigkeiten (z.B. Kombination von Benutzer-ID und Konfigurations-ID)

Praktisches Code-Beispiel (mit UI)

Kombiniert immer den aktuellen Status der beiden Eingabefelder eines Formulars.

ts
import { combineLatest, fromEvent } from 'rxjs';
import { map, startWith } from 'rxjs';

// Ausgabebereich erstellen
const output = document.createElement('div');
output.innerHTML = '<h3>combineLatest Praxisbeispiel:</h3>';
document.body.appendChild(output);

// Formularfelder erstellen
const nameInput = document.createElement('input');
nameInput.placeholder = 'Name eingeben';
document.body.appendChild(nameInput);

const emailInput = document.createElement('input');
emailInput.placeholder = 'E-Mail eingeben';
document.body.appendChild(emailInput);

// Observable für jede Eingabe
const name$ = fromEvent(nameInput, 'input').pipe(
  map(e => (e.target as HTMLInputElement).value),
  startWith('')
);

const email$ = fromEvent(emailInput, 'input').pipe(
  map(e => (e.target as HTMLInputElement).value),
  startWith('')
);

// Neueste Eingabewerte kombinieren
combineLatest([name$, email$]).subscribe(([name, email]) => {
  output.innerHTML = `
    <div><strong>Name:</strong> ${name}</div>
    <div><strong>E-Mail:</strong> ${email}</div>
  `;
});
  • Bei der Eingabe in eines der beiden Felder werden sofort die letzten beiden Eingabezustände angezeigt.
  • Mit startWith('') wird das kombinierte Ergebnis von Anfang an erhalten.

Verwandte Operatoren

  • combineLatestWith - Pipeable Operator Version (wird in der Pipeline verwendet)
  • withLatestFrom - Wird nur durch den Hauptstrom ausgelöst
  • zip - Paart entsprechende Werte (Erstellungsfunktion)

Veröffentlicht unter CC-BY-4.0-Lizenz.