Ga naar inhoud

Poorten en verbindingen

De poorten begrijpen is begrijpen wanneer een vakje wordt uitgevoerd. Deze pagina is de referentie van het model.

Elk vakje heeft ze, zonder dat ze in de configuratie verschijnen:

PoortRichtingStroomRol
inInvoerSignaalTrigger. Meerdere inkomende verbindingen toegestaan
errorUitvoerWaarde + signaalFoutroute
doneUitvoerSignaalUitgestuurd nadat het vakje en zijn hele stroomafwaartse subgraaf klaar zijn

Drie vakjes hebben geen error-poort: Output, Nu en Retry (die laatste is zelf een foutgrens). Twee hebben geen done: Output en Throw.

StroomDenkbeeldGedrag
WaardeEen gegevenVervoert een waarde; werkt ook als trigger
SignaalEen tikVervoert niets, activeert alleen
BeideVervoert een waarde en activeert

De enige verboden combinatie: een uitvoer met een puur signaal naar een invoer met een pure waarde. Er zou niets in de waarde te zetten zijn.

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

De typering dient vooral het visuele comfort, met één strikte uitzondering: een invoer van het type lijst (de poort list van de acties Aan lijst toevoegen en Uit lijst verwijderen) weigert een bron die niet met een lijst compatibel is. json en list zijn onderling compatibel; een gewoon object is dat niet.

  • Een invoerpoort accepteert maar één verbinding. Dat houdt de graaf leesbaar: één waarde, één herkomst.
  • Behalve in, die zoveel verbindingen accepteert als u wilt.
  • Een uitvoer kan zoveel invoeren voeden als u wilt.

Drie regels, in deze volgorde:

  1. De wortels starten. Elk vakje zonder inkomende verbinding wordt bij de start van het scenario aangezet. Er is geen “start”-vakje.
  2. Alleen de aangesloten invoeren worden afgewacht. Een vakje wordt uitgevoerd wanneer al zijn daadwerkelijk verbonden invoerpoorten een waarde hebben ontvangen. Een poort die niet is aangesloten, wordt nooit afgewacht. De waarden blijven onthouden: een invoer houdt de laatst ontvangen waarde vast.
  3. De poort in werkt als barrière. Wordt die door meerdere verbindingen gevoed, dan wacht hij tot alle zijn aangekomen en activeert dan één keer. Dat is de “wachten tot deze drie takken klaar zijn” van het model.

De uitzondering: bij elk event opnieuw spelen

Section titled “De uitzondering: bij elk event opnieuw spelen”

De optie “Bij elk ontvangen event opnieuw spelen” (contextmenu van het vakje) verandert alle aangesloten invoeren in niet-blokkerende “of”-poorten: het vakje wordt bij elke ontvangen waarde opnieuw geactiveerd, op welke poort dan ook.

Er zijn twee toepassingen: een stream bericht per bericht verwerken, en een voltooiingscyclus deblokkeren (een graaf die naar zichzelf terugloopt).

Dit is in de praktijk het nuttigste onderscheid:

  • een waarde-uitvoer stuurt uit zodra het vakje zijn resultaat heeft geproduceerd;
  • done wacht daarnaast tot alles wat dat resultaat verbruikt klaar is.

Om te sequentiëren — “doe dit allemaal en ruim daarna op” — sluit u aan op done. Om een gegeven door te geven, sluit u aan op de waarde-uitvoer.

Dat is geen apart mechanisme: het zijn uitvoerpoorten met een rol, en die rol bepaalt hun kleur.

VakjeUitvoeren
Ifthen / else
While, Do…Whilethen (de body)
Assertthen (geslaagd) / else (mislukt)
Retryattempt / exhausted
Schema validatevalid / invalid / errors
Switchéén poort per geval, plus default
Socket.IO-verbindingéén poort per opgegeven event, plus others

Een verbinding kan een selector dragen: een pad dat op de waarde onderweg wordt toegepast.

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

De vormen a.b, a[0], a['sleutel'] en a["sleutel"] worden geaccepteerd. Een segment dat JSON bevat, wordt onderweg geparseerd; een pad dat nergens op uitkomt, levert undefined op.

Restorm leidt soms zelf een selector af op het moment van aansluiten, wanneer de bron een statisch voorbeeld heeft dat tot één primitieve waarde te reduceren is. U kunt die altijd vervangen of leegmaken.