Przejdź do głównej zawartości

Porty i połączenia

Zrozumienie portów oznacza zrozumienie tego, kiedy blok się wykonuje. Ta strona jest referencją modelu.

Ma je każdy blok, choć nie pojawiają się w jego konfiguracji:

PortKierunekPrzepływRola
inWejścieSygnałWyzwalacz. Przyjmowanych jest wiele połączeń wchodzących
errorWyjścieWartość + sygnałTrasa błędu
doneWyjścieSygnałEmitowany po zakończeniu bloku oraz całego jego podgrafu w dół

Trzy bloki nie mają portu error: Output, Teraz i Retry (ten ostatni sam stanowi granicę błędu). Dwa nie mają done: Output i Throw.

PrzepływSkojarzenieZachowanie
WartośćDanaPrzenosi wartość; służy również jako wyzwalacz
SygnałImpulsNie przenosi niczego, jedynie wyzwala
ObaPrzenosi wartość oraz wyzwala

Jedyna zabroniona kombinacja: wyjście czysto sygnałowe do wejścia czysto wartościowego. Nie byłoby czego umieścić w wartości.

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

Typowanie służy przede wszystkim wygodzie wzrokowej, z jednym ścisłym wyjątkiem: wejście typu lista (port list akcji Dodaj do listy oraz Usuń z listy) odrzuca źródło, które nie jest zgodne z listą. json i list są ze sobą zgodne; zwykły object już nie.

  • Port wejściowy przyjmuje tylko jedno połączenie. To właśnie sprawia, że graf pozostaje czytelny: jedna wartość, jedno pochodzenie.
  • Z wyjątkiem in, który przyjmuje dowolnie wiele połączeń.
  • Wyjście może zasilić dowolnie wiele wejść.

Trzy reguły, w tej kolejności:

  1. Korzenie startują. Każdy blok bez połączenia wchodzącego jest inicjowany przy uruchomieniu scenariusza. Nie ma bloku „start”.
  2. Oczekiwane są wyłącznie wejścia podłączone. Blok wykonuje się, gdy każdy z jego faktycznie połączonych portów wejściowych otrzymał wartość. Port niepodłączony nigdy nie jest oczekiwany. Wartości pozostają zapamiętane: wejście przechowuje ostatnią odebraną wartość.
  3. Port in stanowi barierę. Zasilany wieloma połączeniami czeka, aż dotrą wszystkie, a następnie wyzwala jednokrotnie. To modelowe „poczekaj na zakończenie tych trzech gałęzi”.

Wyjątek: powtarzanie przy każdym zdarzeniu

Section titled “Wyjątek: powtarzanie przy każdym zdarzeniu”

Opcja „Powtarzaj przy każdym odebranym zdarzeniu” (menu kontekstowe bloku) zamienia wszystkie podłączone wejścia w nieblokujące bramki „lub”: blok wyzwala się ponownie przy każdej odebranej wartości, na dowolnym porcie.

Dwa zastosowania: przetwarzanie strumienia komunikat po komunikacie oraz odblokowanie cyklu domknięcia (grafu, który zawraca do siebie samego).

To najbardziej użyteczne rozróżnienie w praktyce:

  • wyjście wartości emituje, gdy tylko blok wytworzy swój wynik;
  • done czeka dodatkowo, aż zakończy się wszystko, co ten wynik konsumuje.

Do sekwencjonowania — „zrób to wszystko, a potem posprzątaj” — należy podłączać się od done. Do przekazania danej trzeba podłączyć się do wyjścia wartości.

Nie są osobnym mechanizmem: to porty wyjściowe obarczone rolą, która steruje ich kolorem.

BlokWyjścia
Ifthen / else
While, Do…Whilethen (treść pętli)
Assertthen (powodzenie) / else (niepowodzenie)
Retryattempt / exhausted
Walidacja schematuvalid / invalid / errors
Switchjeden port na każdy przypadek, plus default
Połączenie Socket.IOjeden port na każde zadeklarowane zdarzenie, plus others

Połączenie może nieść selektor: ścieżkę stosowaną do przesyłanej wartości.

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

Przyjmowane są formy a.b, a[0], a['key'] oraz a["key"]. Segment zawierający JSON jest analizowany w locie; ścieżka, która niczemu nie odpowiada, daje undefined.

Restorm czasami sam wyprowadza selektor w momencie podłączania, gdy źródło ma statyczny podgląd redukujący się do jednej wartości prostej. Zawsze można go zastąpić albo opróżnić.