Ports und Verbindungen
Die Ports zu verstehen bedeutet zu verstehen, wann ein Baustein ausgeführt wird. Diese Seite ist die Referenz für das Modell.
Die drei impliziten Ports
Section titled “Die drei impliziten Ports”Jeder Baustein besitzt sie, ohne dass sie in seiner Konfiguration erscheinen:
| Port | Richtung | Fluss | Rolle |
|---|---|---|---|
in | Eingang | Signal | Auslöser. Mehrere eingehende Verbindungen werden akzeptiert |
error | Ausgang | Wert + Signal | Fehlerpfad |
done | Ausgang | Signal | Wird ausgelöst, nachdem der Baustein und sein gesamter nachgelagerter Teilgraph abgeschlossen sind |
Drei Bausteine besitzen keinen error-Port: Ausgang, Jetzt und
Retry (Letzterer bildet selbst eine Fehlergrenze). Zwei besitzen kein
done: Ausgang und Throw.
Flusstypen
Section titled “Flusstypen”| Fluss | Gedankenmodell | Verhalten |
|---|---|---|
| Wert | Eine Dateneinheit | Transportiert einen Wert; dient auch als Auslöser |
| Signal | Ein Impuls | Transportiert nichts, löst nur aus |
| Beides | Transportiert einen Wert und löst aus |
Die einzige verbotene Kombination: ein Ausgang mit reinem Signal zu einem Eingang mit reinem Wert. Es gäbe nichts, das in den Wert eingesetzt werden könnte.
Datentypen
Section titled “Datentypen”any · json · number · string · boolean · duration · response ·
status · list · object.
Die Typisierung dient vor allem dem visuellen Komfort, mit einer strikten
Ausnahme: Ein Eingang vom Typ Liste (der Port list der Aktionen Zu
Liste hinzufügen und Aus Liste entfernen) verweigert eine Quelle, die
nicht listenkompatibel ist. json und list sind untereinander
kompatibel; ein einfaches object ist es nicht.
Arität
Section titled “Arität”- Ein Eingangsport akzeptiert nur eine einzige Verbindung. Das macht den Graphen lesbar: ein Wert, eine Herkunft.
- Außer
in, der so viele Verbindungen akzeptiert wie gewünscht. - Ein Ausgang kann beliebig viele Eingänge speisen.
Wann ein Baustein ausgeführt wird
Section titled “Wann ein Baustein ausgeführt wird”Drei Regeln, in dieser Reihenfolge:
- Die Wurzeln starten. Jeder Baustein ohne eingehende Verbindung wird beim Start des Szenarios angestoßen. Es gibt keinen „Start“-Baustein.
- Nur verdrahtete Eingänge werden abgewartet. Ein Baustein wird ausgeführt, sobald jeder seiner tatsächlich verbundenen Eingangsports einen Wert erhalten hat. Ein nicht verdrahteter Port wird nie abgewartet. Die Werte bleiben gespeichert: Ein Eingang behält den zuletzt empfangenen Wert.
- Der
in-Port bildet eine Schranke. Wird er von mehreren Verbindungen gespeist, wartet er, bis alle eingetroffen sind, und löst dann einmal aus. Das ist das „warte, bis diese drei Zweige fertig sind“ des Modells.
Die Ausnahme: bei jedem Ereignis erneut auslösen
Section titled “Die Ausnahme: bei jedem Ereignis erneut auslösen”Die Option „Bei jedem empfangenen Ereignis erneut auslösen“ (Kontextmenü des Bausteins) verwandelt alle verdrahteten Eingänge in nicht blockierende „Oder“-Tore: Der Baustein wird bei jedem empfangenen Wert erneut ausgelöst, an welchem Port auch immer.
Zwei Anwendungsfälle: einen Stream Nachricht für Nachricht verarbeiten und einen Abschlusszyklus entblockieren (ein Graph, der auf sich selbst zurückschleift).
done gegenüber einem Wertausgang
Section titled “done gegenüber einem Wertausgang”Das ist die in der Praxis nützlichste Unterscheidung:
- ein Wertausgang sendet, sobald der Baustein sein Ergebnis erzeugt hat;
donewartet zusätzlich, bis alles, was dieses Ergebnis konsumiert, fertig ist.
Um zu sequenzieren – „mach das alles, dann räum auf“ – verdrahten Sie von
done aus. Um Daten weiterzugeben, verdrahten Sie vom Wertausgang aus.
Bedingte Verzweigungen
Section titled “Bedingte Verzweigungen”Sie sind kein eigener Mechanismus: Es sind Ausgangsports mit einer Rolle, die ihre Farbe bestimmt.
| Baustein | Ausgänge |
|---|---|
| If | then / else |
| While, Do…While | then (der Rumpf) |
| Assert | then (Erfolg) / else (Fehlschlag) |
| Retry | attempt / exhausted |
| Schemavalidierung | valid / invalid / errors |
| Switch | ein Port pro Fall, plus default |
| Socket.IO-Verbindung | ein Port pro deklariertem Ereignis, plus others |
Verbindungsselektoren
Section titled “Verbindungsselektoren”Eine Verbindung kann einen Selektor tragen: einen Pfad, der auf den durchlaufenden Wert angewendet wird.
data.items[0].idbody['user-id']headers["content-type"]statusDie Formen a.b, a[0], a['clé'] und a["clé"] werden
akzeptiert. Ein Segment, das JSON enthält, wird im Flug analysiert; ein
Pfad, der auf nichts passt, ergibt undefined.
Restorm leitet einen Selektor manchmal von selbst ab, während der Verdrahtung, wenn die Quelle eine statische Vorschau besitzt, die sich auf einen einzigen primitiven Wert reduziert. Sie können ihn jederzeit ersetzen oder leeren.