Skip to content

race - neem de stream die als eerste een waarde uitgeeft ​

race is een speciale samengevoegde Creation Function die gebruik maakt van alleen de eerste Observable die een waarde uitgeeft uit meerdere Observables, en de andere Observables negeert.

Basissyntaxis en gebruik ​

ts
import { race, timer } from 'rxjs';
import { map } from 'rxjs';

const slow$ = timer(5000).pipe(map(() => 'Langzaam (5 seconden)'));
const fast$ = timer(2000).pipe(map(() => 'Snel (2 seconden)'));

race(slow$, fast$).subscribe(console.log);
// Output: Snel (2 seconden)
  • Alleen de Observable die als eerste een waarde uitgeeft is de winnaar en gaat verder met volgende streams.
  • Andere Observables worden genegeerd.

🌐 RxJS Officiële Documentatie - race

Typische gebruikspatronen ​

  • Verwerk de vroegste van meerdere gebruikersacties (klikken, toetsaanslagen, scrollen)
  • Neem de vroegste van meerdere triggers over, zoals handmatig versturen en automatisch opslaan
  • Toon de eerst voltooide gegevens eerst onder meerdere gegevensverzamelingsprocessen

Praktische codevoorbeelden (met UI) ​

Simuleert een race om alleen de eerste uit te geven uit drie streams die op verschillende tijdstippen vuren.

ts
import { race, timer } from 'rxjs';
import { map } from 'rxjs';

// Create output area
const output = document.createElement('div');
output.innerHTML = '<h3>race praktisch voorbeeld:</h3>';
document.body.appendChild(output);

// Different timing Observables
const slow$ = timer(5000).pipe(map(() => 'Langzaam (na 5 seconden)'));
const medium$ = timer(3000).pipe(map(() => 'Gemiddeld (na 3 seconden)'));
const fast$ = timer(2000).pipe(map(() => 'Snel (na 2 seconden)'));

const startTime = Date.now();

// Race start message
const waiting = document.createElement('div');
waiting.textContent = 'Race gestart... Wachten tot de eerste stream wordt uitgegeven.';
output.appendChild(waiting);

// Run race
race(slow$, medium$, fast$).subscribe(winner => {
  const endTime = Date.now();
  const elapsed = ((endTime - startTime) / 1000).toFixed(2);

  const result = document.createElement('div');
  result.innerHTML = `<strong>Winnaar:</strong> ${winner} (Verstreken tijd: ${elapsed} seconden)`;
  result.style.color = 'green';
  result.style.marginTop = '10px';
  output.appendChild(result);

  const explanation = document.createElement('div');
  explanation.textContent = '※ Alleen de eerste Observable die een waarde uitgeeft wordt geselecteerd.';
  explanation.style.marginTop = '5px';
  output.appendChild(explanation);
});
  • Na 2 seconden wordt de eerste fast$ uitgegeven en daarna wordt alleen fast$ uitgevoerd.
  • Andere medium$ en slow$ uitgifte worden genegeerd.

Gerelateerde Operators ​

  • raceWith - Pipeable Operator versie (gebruikt in pipeline)
  • timeout - Alleen timeout operator
  • merge - Voeg alle streams samen Creation Function

Uitgebracht onder de CC-BY-4.0 licentie.