Skip to content

Selection and partitioning systems Creation Function

Creation Function die een Observable selecteren uit meerdere Observables of een Observable opsplitsen in meerdere Observables volgens voorwaarden.

Wat zijn Creation Function?

Creation Functions voor selectie- en splitsystemen verschillen van die voor combinatie-systemen en hebben de volgende rollen.

  • Selecteren: selecteert uit meerdere Observables een Observable die aan bepaalde voorwaarden voldoet.
  • Splitsen: splitst een Observable op in meerdere Observables volgens een voorwaarde.

Deze werken in de tegenovergestelde richting of vanuit een ander perspectief dan de join 'combineer meerdere in één'.

Belangrijkste selectie- en verdeelsystemen Creation Function

FunctieBeschrijvingGebruikscasus.
Race](/nl/guide/creation-functions/selection/race)Eerst gepubliceerde aannemenWedstrijd met meerdere gegevensbronnen
partitionIn tweeën splitsen met voorwaardenVertakkingsproces voor succes/falen

Criteria voor gebruik

race - selecteer de snelste Observable

race` abonneert zich op meerdere Observables tegelijk en neemt de **eerste Observable aan die een waarde afgeeft. Observables die niet worden overgenomen, worden automatisch unsubscribe.

Gebruiksgeval:.

  • Het snelste antwoord van meerdere API-eindpunten overnemen
  • Time-out afhandeling (origineel proces vs. timer)
  • Concurrentie tussen cache en daadwerkelijke API-aanroepen
typescript
import { race, timer } from 'rxjs';
import { map } from 'rxjs';

// Neem de snelste uit meerdere gegevensbronnen over
const fast$ = timer(1000).pipe(map(() => 'Fast API'));
const slow$ = timer(3000).pipe(map(() => 'Slow API'));

race(fast$, slow$).subscribe(console.log);
// Uitvoer.: 'Fast API' (1De uitvoer wordt na een secondeslow$wordt geannuleerd)

Partition - gesplitst per voorwaarde

De partition splitst een Observable in twee Observables op basis van een voorwaardelijke functie. De retourwaarde is een array [indien waar, indien onwaar].

Gebruiksgeval:.

  • Scheiding van succes en mislukking.
  • Scheiding van even en oneven getallen.
  • Scheiding van geldige en ongeldige gegevens.
typescript
import { of, partition } from 'rxjs';

const source$ = of(1, 2, 3, 4, 5, 6);

// Opsplitsen in even en oneven nummers
const [even$, odd$] = partition(source$, n => n % 2 === 0);

even$.subscribe(val => console.log('Even:', val));
// Uitvoer.: Even: 2, Even: 4, Even: 6

odd$.subscribe(val => console.log('Odd:', val));
// Uitvoer.: Odd: 1, Odd: 3, Odd: 5

Conversie van koud naar warm

Zoals de bovenstaande tabel laat zien, genereren **Alle Selection en Split System Creation Function een Cold Observable. Elke inschrijving initieert een onafhankelijke uitvoering.

Cold Observable kunnen worden geconverteerd naar Hot Observable door gebruik te maken van multicast-gebaseerde operatoren (share(), shareReplay(), etc.).

Praktisch voorbeeld: delen van conflicterende API-verzoeken

typescript
import { race, timer } from 'rxjs';
import { map, share } from 'rxjs';

// ❄️ Cold - Concurrentie herhalen voor elk abonnement
const coldRace$ = race(
  timer(1000).pipe(map(() => 'Fast API')),
  timer(3000).pipe(map(() => 'Slow API'))
);

coldRace$.subscribe(val => console.log('Abonnee1:', val));
coldRace$.subscribe(val => console.log('Abonnee2:', val));
// → Elke abonnee voert een onafhankelijke competitie uit (een2competitie)

// 🔥 Hot - Wedstrijdresultaten delen tussen abonnees
const hotRace$ = race(
  timer(1000).pipe(map(() => 'Fast API')),
  timer(3000).pipe(map(() => 'Slow API'))
).pipe(share());

hotRace$.subscribe(val => console.log('Abonnee1:', val));
hotRace$.subscribe(val => console.log('Abonnee2:', val));
// → 1Deel de resultaten van één competitie

TIP

Zie voor meer informatie [Basissysteem voor creatie - Conversie van koud naar warm](/nl/guide/creation-functions/basic/#cold- to -hot-).

Correspondentie met Pipeable Operator

Selection en division Creation Functions hebben ook een overeenkomstige Pipeable Operator.

Creation FunctionPipeable Operator
race(a$, b$)`a$.pipe(raceWith(b$))
partition(bron$, predikaat)Kan niet worden gebruikt binnen een pijplijn (Creation Function).

oproep_7_

Er is geen Pipeable Operator versie van partition. Als een partition nodig is, kan deze worden gebruikt als een Creation Function of twee keer handmatig worden gesplitst met filter.

Volgende stappen.

Klik op de links in de bovenstaande tabel voor meer informatie over de gedetailleerde werking en praktische voorbeelden van elke Creation Function.

U kunt ook de Combinatie Creation Functies en Voorwaardelijke Creation Functies leren. Samen bieden ze een holistisch begrip van Creation Function.

Uitgebracht onder de CC-BY-4.0 licentie.