Skip to content

mergeMap - Parallelle samenvoeging

De mergeMap (ook bekend als flatMap) operator converteert elke waarde naar een nieuwe Observable en voegt ze plat gelijktijdig samen. Het is zeer nuttig wanneer u verzoeken onmiddellijk wilt uitvoeren zonder sequentieel te wachten, of voor geneste asynchrone verwerking.

🔰 Basissyntax en gebruik

ts
import { of } from 'rxjs';
import { mergeMap, delay } from 'rxjs';

of('A', 'B', 'C').pipe(
  mergeMap(value =>
    of(`${value} voltooid`).pipe(delay(1000))
  )
).subscribe(console.log);

// Output voorbeeld (in willekeurige volgorde):
// A voltooid
// B voltooid
// C voltooid
  • Genereert een nieuwe Observable voor elke waarde.
  • Die Observables worden parallel uitgevoerd en de resultaten worden in willekeurige volgorde uitgevoerd.

🌐 RxJS Officiële Documentatie - mergeMap

💡 Typische gebruikspatronen

  • Verstuur API-verzoek voor elke knopklik
  • Start bestandsupload voor elke file drop-gebeurtenis
  • Activeer asynchrone taken gelijktijdig getriggerd door gebruikersacties

🧠 Praktisch codevoorbeeld (met UI)

Dit is een voorbeeld van het triggeren van een asynchroon verzoek (respons na 2 seconden) elke keer dat een knop wordt geklikt.

ts
import { fromEvent, of } from 'rxjs';
import { mergeMap, delay } from 'rxjs';

// Maak knop
const button = document.createElement('button');
button.textContent = 'Verstuur verzoek';
document.body.appendChild(button);

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

// Klikgebeurtenis
fromEvent(button, 'click').pipe(
  mergeMap((_, index) => {
    const requestId = index + 1;
    console.log(`Verzoek ${requestId} gestart`);
    return of(`Respons ${requestId}`).pipe(delay(2000));
  })
).subscribe((response) => {
  const div = document.createElement('div');
  div.textContent = `✅ ${response}`;
  output.appendChild(div);
});
  • Met elke klik wordt onmiddellijk een asynchroon verzoek verstuurd.
  • Wacht 2 seconden voor elk verzoek individueel, dus resultaten zijn niet geordend op volgorde van aankomst.
  • Dit is een geweldig voorbeeld voor het begrijpen van parallelle verwerking.

Uitgebracht onder de CC-BY-4.0 licentie.