Sådan forstås RxJS-operatører ved at spise en pizza: zip, fork Forbinde og kombinere Senest forklaret med eksempler

Hvad er RxJS?

Reaktiv programmering er et asynkron programmeringsparadigme, der beskæftiger sig med datastrømme og forplantning af ændringer - Wikipedia RxJS er et bibliotek til reaktiv programmering ved hjælp af observerbare, der gør det lettere at komponere asynkron eller tilbagekaldsbaseret kode - RxJS docs

De væsentlige begreber i RxJS er

  • En observerbar er en datastrøm
  • Observatører kan registrere op til 3 tilbagekald:
  1. næste kaldes 1: M tid til at skubbe nye værdier til observatøren
  2. fejl kaldes højst 1 gang, når der opstod en fejl
  3. komplet kaldes højst 1 gang ved afslutningen
  • Abonnement "starter" den observerbare strøm

Uden at abonnerestrømmen begynder ikke at udsende værdier. Dette er hvad vi kalder en kold observerbar.

Det er detsvarer til at abonnere på en avis eller et magasin ... du begynder først at få dem, før du abonnerer. Derefter skaber det et 1 til 1 forhold mellem producenten (observerbar) og forbrugeren (observatør).

Hvad er RxJS-operatører?

Operatører er rene funktioner, der muliggør en funktionel programmeringsstil til at håndtere samlinger med operationer. Der er to slags operatører:

  • Oprettelse operatører
  • Rørbare operatører: transformation, filtrering, hastighedsbegrænsning, udfladning

Emner er en speciel type observerbar, der tillader, at værdier kan multicast for mange observatører. Mens almindelige observerbare enheder er unicast (hver observatør, der abonnerer på, ejer en uafhængig udførelse af den observerbare), er emner multicast. Dette er, hvad vi kalder en varm observerbar.

I denne artikel vil jeg fokusere på zip, combineLatestog forkJoinoperatører. Disse er RxJS-kombinationsoperatører, hvilket betyder, at de gør det muligt for os at deltage i information fra flere observerbare. Orden, tid og struktur af udsendte værdier er de primære forskelle mellem dem.

Lad os se på hver enkelt individuelt.

lynlås ()

  • zip begynder ikke at udsende, før hver indre observerbare udsender mindst en værdi
  • zip udsender så længe udsendte værdier kan indsamles fra alle indre observerbare
  • zip udsender værdier som en matrix

Lad os forestille os, at du er sammen med Mario og Luigi, to af dine bedste venner, på den bedste italienske restaurant i Rom. Hver af jer bestiller en drink, en pizza og en dessert. Du angiver over for tjeneren, at han først skal medbringe drikkevarer, derefter pizzaer og endelig desserter.

Denne situation kan repræsenteres med 3 forskellige observationer, der repræsenterer de 3 forskellige ordrer. I denne specifikke situation kan tjeneren bruge zipoperatøren til at bringe (udsende) de forskellige ordreelementer efter kategori.

❗️❗️❗️Advarsel❗️❗️❗️

Hvis du går tilbage til den samme italienske restaurant med din kæreste, men hun ikke vil spise, er dette hvad der vil ske:

Hvis brugeren waiter$bruger zipoperatøren, får du kun din drink!

Hvorfor?

Fordi når det waiter$udsender drikkevarer, er det girlfriend$observerbare komplet, og der kan ikke samles mere værdi fra det. Forhåbentlig kan den waiter$bruge en anden operatør til os, så vi ikke går op med vores kæreste?

combineLatest ()

  • combineLatest begynder ikke at udsende, før hver indre observerbare udsender mindst en værdi
  • Når enhver indre observerbar udsender en værdi, udsender den sidst udsendte værdi fra hver

På nøjagtig samme restaurant beslutter den smarte waiter$nu at bruge combineLatestoperatøren.

❗️❗️❗️Advarsel❗️❗️❗️

Med combineLatestbetyder rækkefølgen af de leverede indre observerbare ting.

Hvis you$leveres først til waiter$, udsender den kun en værdi ["Tiramisu", "Sprite"].

Dette sker, fordi combineLatestdet ikke begynder at udsende, før hver indre observerbare udsender mindst en værdi. girlfriend$begynder at udsende, når den første indre observerbare udsender sin sidste værdi. Derefter combineLatestudsender de sidste værdier indsamlet fra begge indre observerbare.

forkJoin ()

  • forkJoinudsender den sidst udsendte værdi fra hver indre observerbar, når de alle er færdige
  • forkJoin vil aldrig udsende, hvis en af ​​de observerbare ikke fuldføres

Når du går til restauranten og bestiller en pizza, vil du ikke vide alle trin om, hvordan pizzaen tilberedes. Hvis osten tilsættes før tomaterne eller det modsatte. Du vil bare hente din pizza! Det er her, der forkJoinkommer i spil.

❗️❗️❗️Advarsel❗️❗️❗️

  • Hvis en af ​​de indre observerbare kaster en fejl, går alle værdier tabt
  • forkJoin fuldfører ikke
  • Hvis du kun er bekymret, når alle indre observerbare færdiggørelser med succes, kan du fange fejlen udefra
  • Derefter forkJoinfuldender
  • Hvis du ikke er ligeglad med, at indre observerbare færdiggøres med succes eller ej, skal du fange fejl fra hver eneste indre observerbar
  • Derefter forkJoinfuldender

Når jeg går på restaurant med venner, er jeg ligeglad med, om en af ​​dem modtager en brændt pizza. Jeg vil bare have min? så jeg vil bede om waiter$at fange fejlene fra indre observerbare individuelt.

Pak ind

Vi dækkede meget i denne artikel! Gode ​​eksempler er vigtige for bedre at forstå RxJS-operatører og hvordan man vælger dem klogt.

For kombinationsoperatører som zip, combineLatestog forkJoinrækkefølgen af ​​indre observerbare, som du leverer, er også kritisk, da det kan føre dig til uventet adfærd.

Der er meget mere at dække inden for RxJS, og jeg vil gøre det i yderligere artikler.

Jeg håber du nød denne artikel! ?

? Du kan følge mig på Twitter for at få besked om nye Angular / RxJS blogindlæg og seje tip!