Hoppa till innehåll

Portar och kopplingar

Att förstå portarna är att förstå när en ruta körs. Den här sidan är modellens referens.

Varje ruta har dem, utan att de syns i dess konfiguration:

PortRiktningFlödeRoll
inIngångSignalUtlösare. Flera inkommande kopplingar accepteras
errorUtgångVärde + signalFelväg
doneUtgångSignalSkickas när rutan och hela dess nedströms delgraf är klara

Tre rutor saknar port error: Output, Nu och Retry (den sista är själv en felgräns). Två saknar done: Output och Throw.

FlödeMental symbolBeteende
VärdeEtt datumBär ett värde; fungerar också som utlösare
SignalEn pulsBär ingenting, utlöser bara
BådaBär ett värde och utlöser

Den enda förbjudna kombinationen: en utgång med ren signal till en ingång med rent värde. Det skulle inte finnas något att lägga i värdet.

any · json · number · string · boolean · duration · response · status · list · object.

Typningen är mest till för det visuella, med ett strikt undantag: en ingång av typen lista (porten list i åtgärderna Lägg till i listan och Ta bort från listan) avvisar en källa som inte är listkompatibel. json och list är kompatibla med varandra; ett enkelt object är det inte.

  • En ingångsport accepterar bara en koppling. Det är det som gör grafen läsbar: ett värde, ett ursprung.
  • Utom in, som accepterar hur många kopplingar som helst.
  • En utgång kan mata hur många ingångar som helst.

Tre regler, i ordning:

  1. Rötterna startar. Varje ruta utan inkommande koppling startas när scenariot körs igång. Det finns ingen ”start”-ruta.
  2. Bara inkopplade ingångar väntas in. En ruta körs när var och en av dess faktiskt anslutna ingångsportar har tagit emot ett värde. En port som inte är inkopplad väntas aldrig in. Värdena lagras: en ingång behåller det senast mottagna värdet.
  3. Porten in är en barriär. När den matas av flera kopplingar väntar den tills alla har kommit fram, och utlöser sedan en gång. Det är modellens ”vänta tills de här tre grenarna är klara”.

Alternativet ”Spela upp igen vid varje mottagen händelse” (rutans snabbmeny) förvandlar alla inkopplade ingångar till icke-blockerande ”eller”-grindar: rutan utlöses på nytt vid varje mottaget värde, på vilken port som helst.

Två användningsområden: att bearbeta en ström meddelande för meddelande, och att låsa upp en slutföringscykel (en graf som loopar tillbaka till sig själv).

Det är den mest användbara skillnaden i praktiken:

  • en värdeutgång skickar så snart rutan har producerat sitt resultat;
  • done väntar dessutom tills allt som konsumerar det resultatet är klart.

För att sekvensera — ”gör allt det där, städa sedan upp” — kopplar du från done. För att skicka vidare ett värde kopplar du från värdeutgången.

De är inte någon separat mekanism: de är utgångsportar som bär en roll, och den rollen styr deras färg.

RutaUtgångar
Ifthen / else
While, Do…Whilethen (kroppen)
Assertthen (lyckat) / else (misslyckat)
Retryattempt / exhausted
Schema validatevalid / invalid / errors
Switchen port per fall, plus default
Socket.IO-anslutningen port per deklarerad händelse, plus others

En koppling kan bära en väljare: en sökväg som tillämpas på värdet under transport.

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

Formerna a.b, a[0], a['nyckel'] och a["nyckel"] accepteras. Ett segment som innehåller JSON tolkas i farten; en sökväg som inte matchar något ger undefined.

Restorm härleder ibland en väljare på egen hand när kopplingen skapas, om källan har en statisk förhandsvisning som reducerar sig till ett enda primitivt värde. Du kan alltid ersätta eller tömma den.