Skip to content

combineLatest - Laatste waarden combineren

combineLatest is een Creation Function die alle laatste waarden van meerdere Observables samenbrengt en output. Telkens wanneer een nieuwe waarde van een bron-Observable wordt uitgezonden, wordt een resultaat met alle laatste waarden uitgezonden.

Basissyntaxis en gebruik

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);
});

// Output:
// C 1
// C 2
// C 3
  • Nadat elke Observable minstens één waarde heeft uitgezonden, wordt de gecombineerde waarde uitgevoerd.
  • Telkens wanneer er een nieuwe waarde in een van beiden komt, wordt het laatste paar opnieuw uitgevoerd.

🌐 RxJS Officiële Documentatie - combineLatest

Typische toepassingspatronen

  • Real-time validatie van formulierinvoer (bijv. gelijktijdige monitoring van naam en e-mailadres)
  • Synchronisatie van de status van meerdere streams (bijv. integratie van sensorwaarden of apparaatstatussen)
  • Data-fetching met afhankelijkheden (bijv. combinatie van gebruikers-ID en instellingen-ID)

Praktisch codevoorbeeld (met UI)

Combineert en toont altijd de nieuwste status van twee formulierinvoervelden.

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

// Outputgebied aanmaken
const output = document.createElement('div');
output.innerHTML = '<h3>Praktisch voorbeeld van combineLatest:</h3>';
document.body.appendChild(output);

// Formuliervelden aanmaken
const nameInput = document.createElement('input');
nameInput.placeholder = 'Voer naam in';
document.body.appendChild(nameInput);

const emailInput = document.createElement('input');
emailInput.placeholder = 'Voer e-mail in';
document.body.appendChild(emailInput);

// Observable voor elke invoer
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('')
);

// Laatste invoerwaarden combineren
combineLatest([name$, email$]).subscribe(([name, email]) => {
  output.innerHTML = `
    <div><strong>Naam:</strong> ${name}</div>
    <div><strong>E-mail:</strong> ${email}</div>
  `;
});
  • Wanneer je in een van de velden invoert, worden de nieuwste twee invoerstatussen onmiddellijk weergegeven.
  • Door startWith('') te gebruiken, kun je vanaf het begin het gecombineerde resultaat verkrijgen.

Gerelateerde operators

  • combineLatestWith - Pipeable Operator versie (voor gebruik in pipeline)
  • withLatestFrom - Alleen hoofdstream triggert
  • zip - Creation Function die corresponderende waarden koppelt

Uitgebracht onder de CC-BY-4.0 licentie.