Porturi și legături
A înțelege porturile înseamnă a înțelege când se execută o cutie. Pagina de față este referința modelului.
Cele trei porturi implicite
Section titled “Cele trei porturi implicite”Orice cutie le are, fără ca ele să apară în configurația sa:
| Port | Sens | Flux | Rol |
|---|---|---|---|
in | Intrare | Semnal | Declanșator. Sunt acceptate mai multe legături sosite |
error | Ieșire | Valoare + semnal | Ruta de eșec |
done | Ieșire | Semnal | Emis după finalizarea cutiei și a întregului său subgraf din aval |
Trei cutii nu au port error: Ieșire, Acum și Retry (aceasta din urmă
fiind ea însăși o frontieră de eroare). Două nu au done: Ieșire și
Throw.
Tipuri de flux
Section titled “Tipuri de flux”| Flux | Simbol mental | Comportament |
|---|---|---|
| Valoare | O dată | Transportă o valoare; servește și ca declanșator |
| Semnal | Un top | Nu transportă nimic, doar declanșează |
| Ambele | Transportă o valoare și declanșează |
Singura combinație interzisă: o ieșire de semnal pur către o intrare de valoare pură. Nu ar exista nimic de pus în valoare.
Tipuri de date
Section titled “Tipuri de date”any · json · number · string · boolean · duration · response ·
status · list · object.
Tipizarea servește mai ales confortului vizual, cu o excepție strictă: o intrare
de tip listă (portul list al acțiunilor Adaugă la o listă și Elimină
dintr-o listă) refuză o sursă care nu este compatibilă cu o listă. json și
list sunt compatibile între ele; un object simplu nu este.
Aritate
Section titled “Aritate”- Un port de intrare nu acceptă decât o singură legătură. Este ceea ce face graful lizibil: o valoare, o proveniență.
- Cu excepția lui
in, care acceptă oricâte legături. - O ieșire poate alimenta oricâte intrări.
Când se execută o cutie
Section titled “Când se execută o cutie”Trei reguli, în ordine:
- Rădăcinile pornesc. Orice cutie fără legătură sosită este amorsată la lansarea scenariului. Nu există o cutie „start”.
- Sunt așteptate numai intrările cablate. O cutie se execută atunci când fiecare dintre porturile sale de intrare efectiv conectate a primit o valoare. Un port necablat nu este niciodată așteptat. Valorile rămân memorate: o intrare păstrează ultima valoare primită.
- Portul
inface barieră. Alimentat de mai multe legături, așteaptă ca toate să fi ajuns, apoi declanșează o singură dată. Este mecanismul „așteaptă ca aceste trei ramuri să se termine” al modelului.
Excepția: rejucarea la fiecare eveniment
Section titled “Excepția: rejucarea la fiecare eveniment”Opțiunea „Rejoacă la fiecare eveniment primit” (meniul contextual al cutiei) transformă toate intrările cablate în porți „sau” neblocante: cutia se redeclanșează la fiecare valoare primită, pe oricare port.
Două utilizări: tratarea unui flux mesaj cu mesaj și deblocarea unui ciclu de finalizare (un graf care se buclează asupra lui însuși).
done față de o ieșire de valoare
Section titled “done față de o ieșire de valoare”Este distincția cea mai utilă în practică:
- o ieșire de valoare emite de îndată ce cutia și-a produs rezultatul;
doneașteaptă în plus ca tot ce consumă acest rezultat să fi terminat.
Pentru a secvenția — „fă tot asta, apoi curăță” — cablați de la done. Pentru a
transmite o dată, cablați de la ieșirea de valoare.
Ramurile condiționale
Section titled “Ramurile condiționale”Nu sunt un mecanism separat: sunt porturi de ieșire purtătoare ale unui rol, care le determină culoarea.
| Cutie | Ieșiri |
|---|---|
| If | then / else |
| While, Do…While | then (corpul) |
| Assert | then (reușită) / else (eșec) |
| Retry | attempt / exhausted |
| Validare schemă | valid / invalid / errors |
| Switch | un port pentru fiecare caz, plus default |
| Conexiune Socket.IO | un port pentru fiecare eveniment declarat, plus others |
Selectori de legătură
Section titled “Selectori de legătură”O legătură poate purta un selector: o cale aplicată valorii aflate în tranzit.
data.items[0].idbody['user-id']headers["content-type"]statusFormele a.b, a[0], a['clé'] și a["clé"] sunt acceptate. Un segment care
conține JSON este analizat din zbor; o cale care nu corespunde la nimic dă
undefined.
Restorm deduce uneori singur un selector în momentul cablării, atunci când sursa are o previzualizare statică ce se reduce la o singură valoare primitivă. Îl puteți oricând înlocui sau goli.