Sari la conținut

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.

Orice cutie le are, fără ca ele să apară în configurația sa:

PortSensFluxRol
inIntrareSemnalDeclanșator. Sunt acceptate mai multe legături sosite
errorIeșireValoare + semnalRuta de eșec
doneIeșireSemnalEmis 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.

FluxSimbol mentalComportament
ValoareO datăTransportă o valoare; servește și ca declanșator
SemnalUn topNu transportă nimic, doar declanșează
AmbeleTransportă 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.

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.

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

Trei reguli, în ordine:

  1. Rădăcinile pornesc. Orice cutie fără legătură sosită este amorsată la lansarea scenariului. Nu există o cutie „start”.
  2. 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ă.
  3. Portul in face 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.

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

Este distincția cea mai utilă în practică:

  • o ieșire de valoare emite de îndată ce cutia și-a produs rezultatul;
  • done aș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.

Nu sunt un mecanism separat: sunt porturi de ieșire purtătoare ale unui rol, care le determină culoarea.

CutieIeșiri
Ifthen / else
While, Do…Whilethen (corpul)
Assertthen (reușită) / else (eșec)
Retryattempt / exhausted
Validare schemăvalid / invalid / errors
Switchun port pentru fiecare caz, plus default
Conexiune Socket.IOun port pentru fiecare eveniment declarat, plus others

O legătură poate purta un selector: o cale aplicată valorii aflate în tranzit.

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

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