Poorten en verbindingen
De poorten begrijpen is begrijpen wanneer een vakje wordt uitgevoerd. Deze pagina is de referentie van het model.
De drie impliciete poorten
Section titled “De drie impliciete poorten”Elk vakje heeft ze, zonder dat ze in de configuratie verschijnen:
| Poort | Richting | Stroom | Rol |
|---|---|---|---|
in | Invoer | Signaal | Trigger. Meerdere inkomende verbindingen toegestaan |
error | Uitvoer | Waarde + signaal | Foutroute |
done | Uitvoer | Signaal | Uitgestuurd 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.
Stroomtypen
Section titled “Stroomtypen”| Stroom | Denkbeeld | Gedrag |
|---|---|---|
| Waarde | Een gegeven | Vervoert een waarde; werkt ook als trigger |
| Signaal | Een tik | Vervoert niets, activeert alleen |
| Beide | Vervoert 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.
Gegevenstypen
Section titled “Gegevenstypen”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.
Ariteit
Section titled “Ariteit”- 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.
Wanneer een vakje wordt uitgevoerd
Section titled “Wanneer een vakje wordt uitgevoerd”Drie regels, in deze volgorde:
- De wortels starten. Elk vakje zonder inkomende verbinding wordt bij de start van het scenario aangezet. Er is geen “start”-vakje.
- 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.
- De poort
inwerkt 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).
done tegenover een waarde-uitvoer
Section titled “done tegenover een waarde-uitvoer”Dit is in de praktijk het nuttigste onderscheid:
- een waarde-uitvoer stuurt uit zodra het vakje zijn resultaat heeft geproduceerd;
donewacht 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.
De voorwaardelijke takken
Section titled “De voorwaardelijke takken”Dat is geen apart mechanisme: het zijn uitvoerpoorten met een rol, en die rol bepaalt hun kleur.
| Vakje | Uitvoeren |
|---|---|
| If | then / else |
| While, Do…While | then (de body) |
| Assert | then (geslaagd) / else (mislukt) |
| Retry | attempt / exhausted |
| Schema validate | valid / invalid / errors |
| Switch | één poort per geval, plus default |
| Socket.IO-verbinding | één poort per opgegeven event, plus others |
Verbindingsselectors
Section titled “Verbindingsselectors”Een verbinding kan een selector dragen: een pad dat op de waarde onderweg wordt toegepast.
data.items[0].idbody['user-id']headers["content-type"]statusDe 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.