Porte og forbindelser
At forstå portene er at forstå, hvornår en boks kører. Denne side er modellens reference.
De tre implicitte porte
Section titled “De tre implicitte porte”Enhver boks har dem, uden at de optræder i dens konfiguration:
| Port | Retning | Flow | Rolle |
|---|---|---|---|
in | Indgang | Signal | Udløser. Flere indgående forbindelser accepteres |
error | Udgang | Værdi + signal | Fejlrute |
done | Udgang | Signal | Udsendes, når boksen og hele dens efterfølgende delgraf er færdig |
Tre bokse har ingen error-port: Output, Nu og Retry (sidstnævnte er
selv en fejlgrænse). To har ingen done: Output og Throw.
Flowtyper
Section titled “Flowtyper”| Flow | Mental figur | Opførsel |
|---|---|---|
| Værdi | Et stykke data | Transporterer en værdi; fungerer også som udløser |
| Signal | Et tik | Transporterer intet, udløser kun |
| Begge | Transporterer en værdi og udløser |
Den eneste forbudte kombination: en udgang med et rent signal ind i en indgang med en ren værdi. Der ville ikke være noget at lægge i værdien.
Datatyper
Section titled “Datatyper”any · json · number · string · boolean · duration · response ·
status · list · object.
Typerne tjener først og fremmest det visuelle overblik, med én streng undtagelse:
en indgang af typen liste (porten list på handlingerne Føj til liste og
Fjern fra liste) afviser en kilde, der ikke er listekompatibel. json og list
er indbyrdes kompatible; et simpelt object er det ikke.
Aritet
Section titled “Aritet”- En indgangsport accepterer kun én forbindelse. Det er dét, der gør grafen læsbar: én værdi, ét ophav.
- Undtagen
in, som accepterer lige så mange forbindelser, du vil. - En udgang kan fodre lige så mange indgange, du vil.
Hvornår en boks kører
Section titled “Hvornår en boks kører”Tre regler, i denne rækkefølge:
- Rødderne starter. Enhver boks uden indgående forbindelse sættes i gang, når scenariet startes. Der findes ingen »start«-boks.
- Kun tilkoblede indgange ventes der på. En boks kører, når hver af dens faktisk forbundne indgangsporte har modtaget en værdi. Der ventes aldrig på en port, der ikke er koblet til. Værdierne huskes: en indgang bevarer den senest modtagne værdi.
- Porten
iner en barriere. Fodres den af flere forbindelser, venter den på, at alle er nået frem, og udløser så én gang. Det er modellens »vent til disse tre grene er færdige«.
Undtagelsen: gentag ved hver hændelse
Section titled “Undtagelsen: gentag ved hver hændelse”Indstillingen »Gentag ved hver modtaget hændelse« (boksens kontekstmenu) forvandler alle tilkoblede indgange til ikke-blokerende »eller«-porte: boksen udløses igen ved hver modtaget værdi, på en vilkårlig port.
To anvendelser: at behandle en strøm besked for besked, og at låse en færdiggørelsescyklus op (en graf, der løber tilbage i sig selv).
done over for en værdiudgang
Section titled “done over for en værdiudgang”Det er den mest nyttige skelnen i praksis:
- en værdiudgang sender af sted, så snart boksen har produceret sit resultat;
doneventer derudover på, at alt det, der forbruger resultatet, er færdigt.
Vil du sekvensere — »gør alt dette, og ryd så op« — så kobl fra done. Vil du
sende data videre, så kobl fra værdiudgangen.
De betingede grene
Section titled “De betingede grene”De er ikke en mekanisme for sig: de er udgangsporte, der bærer en rolle, som styrer deres farve.
| Boks | Udgange |
|---|---|
| If | then / else |
| While, Do…While | then (kroppen) |
| Assert | then (succes) / else (fejl) |
| Retry | attempt / exhausted |
| Schema validate | valid / invalid / errors |
| Switch | én port pr. tilfælde, plus default |
| Socket.IO-forbindelse | én port pr. erklæret hændelse, plus others |
Forbindelsesselektorer
Section titled “Forbindelsesselektorer”En forbindelse kan bære en selektor: en sti anvendt på den værdi, der er undervejs.
data.items[0].idbody['user-id']headers["content-type"]statusFormerne a.b, a[0], a['clé'] og a["clé"] accepteres. Et segment, der
indeholder JSON, parses undervejs; en sti, der ikke matcher noget, giver
undefined.
Restorm udleder undertiden en selektor helt af sig selv, når du kobler til, hvis kilden har et statisk eksempel, der reducerer til en enkelt primitiv værdi. Du kan altid erstatte den eller tømme den.