Gå til innholdet

Porter og forbindelser

Å forstå portene er å forstå når en boks kjører. Denne siden er referansen for modellen.

Enhver boks har dem, uten at de vises i konfigurasjonen:

PortRetningFlytRolle
inInngangSignalUtløser. Flere innkommende forbindelser godtas
errorUtgangVerdi + signalFeilrute
doneUtgangSignalSendes ut når boksen og hele delgrafen nedstrøms er fullført

Tre bokser har ingen error-port: Output / Return, og Retry (den siste er selv en feilgrense). To har ingen done: Output / Return og Throw.

FlytTankebildeOppførsel
VerdiEt datastykkeFrakter en verdi; fungerer også som utløser
SignalEt klokkeslagFrakter ingenting, utløser bare
BeggeFrakter 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.

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.

  • 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.

Tre regler, i rekkefølge:

  1. Røttene starter. Enhver boks uten innkommende forbindelse settes i gang når scenarioet starter. Det finnes ingen «start»-boks.
  2. 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.
  3. 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).

Dette er det skillet som er mest nyttig i praksis:

  • en verdiutgang sender ut så snart boksen har produsert resultatet sitt;
  • done venter 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 er ikke noen egen mekanisme: de er utgangsporter som bærer en rolle, og rollen styrer fargen deres.

BoksUtganger
Ifthen / else
While, Do…Whilethen (kroppen)
Assertthen (suksess) / else (fiasko)
Retryattempt / exhausted
Schema validatevalid / invalid / errors
Switchén port per case, pluss default
Socket.IO-tilkoblingén port per erklært hendelse, pluss others

En forbindelse kan bære en selektor: en sti som anvendes på verdien som er underveis.

data.items[0].id
body['user-id']
headers["content-type"]
status

Formene 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.