Porter og forbindelser
Å forstå portene er å forstå når en boks kjører. Denne siden er referansen for modellen.
De tre implisitte portene
Section titled “De tre implisitte portene”Enhver boks har dem, uten at de vises i konfigurasjonen:
| Port | Retning | Flyt | Rolle |
|---|---|---|---|
in | Inngang | Signal | Utløser. Flere innkommende forbindelser godtas |
error | Utgang | Verdi + signal | Feilrute |
done | Utgang | Signal | Sendes ut når boksen og hele delgrafen nedstrøms er fullført |
Tre bokser har ingen error-port: Output / Return, Nå og Retry (den
siste er selv en feilgrense). To har ingen done: Output / Return og
Throw.
Flyttyper
Section titled “Flyttyper”| Flyt | Tankebilde | Oppførsel |
|---|---|---|
| Verdi | Et datastykke | Frakter en verdi; fungerer også som utløser |
| Signal | Et klokkeslag | Frakter ingenting, utløser bare |
| Begge | Frakter en verdi og utløser |
Den ene forbudte kombinasjonen: en utgang med rent signal til en inngang med ren verdi. Det ville ikke være noe å fylle verdien med.
Datatyper
Section titled “Datatyper”any · json · number · string · boolean · duration · response ·
status · list · object.
Typingen tjener først og fremst den visuelle komforten, med ett strengt unntak:
en inngang av typen liste (list-porten på handlingene Legg til i liste og
Fjern fra liste) avviser en kilde som ikke er listekompatibel. json og list
er kompatible med hverandre; et enkelt object er det ikke.
Aritet
Section titled “Aritet”- En inngangsport godtar bare én forbindelse. Det er dette som gjør grafen lesbar: én verdi, én opprinnelse.
- Bortsett fra
in, som godtar så mange forbindelser du vil. - En utgang kan mate så mange innganger du vil.
Når en boks kjører
Section titled “Når en boks kjører”Tre regler, i rekkefølge:
- Røttene starter. Enhver boks uten innkommende forbindelse settes i gang når scenarioet starter. Det finnes ingen «start»-boks.
- Bare de tilkoblede inngangene ventes på. En boks kjører når hver av inngangsportene som faktisk er koblet opp, har mottatt en verdi. En port som ikke er koblet opp, ventes det aldri på. Verdiene huskes: en inngang tar vare på den siste verdien den mottok.
in-porten er en barriere. Mates den av flere forbindelser, venter den til alle har kommet, og utløser så én gang. Dette er modellens «vent til disse tre grenene er ferdige».
Unntaket: kjøre på nytt ved hver hendelse
Section titled “Unntaket: kjøre på nytt ved hver hendelse”Valget «Kjør ved hver mottatt hendelse» (kontekstmenyen på boksen) gjør alle de tilkoblede inngangene om til ikke-blokkerende «eller»-porter: boksen utløses på nytt for hver verdi som kommer inn, på hvilken som helst port.
To bruksområder: å behandle en strøm melding for melding, og å løse opp en fullføringssyklus (en graf som går tilbake på seg selv).
done mot en verdiutgang
Section titled “done mot en verdiutgang”Dette er det skillet som er mest nyttig i praksis:
- en verdiutgang sender ut så snart boksen har produsert resultatet sitt;
doneventer i tillegg til alt som forbruker resultatet, er ferdig.
For å sekvensere — «gjør alt dette, og rydd så opp» — kobler du fra done. For å
sende data videre kobler du fra verdiutgangen.
De betingede grenene
Section titled “De betingede grenene”De er ikke noen egen mekanisme: de er utgangsporter som bærer en rolle, og rollen styrer fargen deres.
| Boks | Utganger |
|---|---|
| If | then / else |
| While, Do…While | then (kroppen) |
| Assert | then (suksess) / else (fiasko) |
| Retry | attempt / exhausted |
| Schema validate | valid / invalid / errors |
| Switch | én port per case, pluss default |
| Socket.IO-tilkobling | én port per erklært hendelse, pluss others |
Forbindelsesselektorer
Section titled “Forbindelsesselektorer”En forbindelse kan bære en selektor: en sti som anvendes på verdien som er underveis.
data.items[0].idbody['user-id']headers["content-type"]statusFormene a.b, a[0], a['key'] og a["key"] godtas. Et segment som
inneholder JSON, tolkes underveis; en sti som ikke treffer noe, gir undefined.
Restorm utleder av og til en selektor helt selv i det øyeblikket du kobler, når kilden har en statisk forhåndsvisning som koker ned til én enkelt primitiv verdi. Du kan alltid erstatte den eller tømme den.