Porty i połączenia
Zrozumienie portów oznacza zrozumienie tego, kiedy blok się wykonuje. Ta strona jest referencją modelu.
Trzy porty niejawne
Section titled “Trzy porty niejawne”Ma je każdy blok, choć nie pojawiają się w jego konfiguracji:
| Port | Kierunek | Przepływ | Rola |
|---|---|---|---|
in | Wejście | Sygnał | Wyzwalacz. Przyjmowanych jest wiele połączeń wchodzących |
error | Wyjście | Wartość + sygnał | Trasa błędu |
done | Wyjście | Sygnał | 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.
Typy przepływu
Section titled “Typy przepływu”| Przepływ | Skojarzenie | Zachowanie |
|---|---|---|
| Wartość | Dana | Przenosi wartość; służy również jako wyzwalacz |
| Sygnał | Impuls | Nie przenosi niczego, jedynie wyzwala |
| Oba | Przenosi 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.
Typy danych
Section titled “Typy danych”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.
Arność
Section titled “Arność”- 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ść.
Kiedy blok się wykonuje
Section titled “Kiedy blok się wykonuje”Trzy reguły, w tej kolejności:
- Korzenie startują. Każdy blok bez połączenia wchodzącego jest inicjowany przy uruchomieniu scenariusza. Nie ma bloku „start”.
- 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ść.
- Port
instanowi 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).
done a wyjście wartości
Section titled “done a wyjście wartości”To najbardziej użyteczne rozróżnienie w praktyce:
- wyjście wartości emituje, gdy tylko blok wytworzy swój wynik;
doneczeka 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.
Gałęzie warunkowe
Section titled “Gałęzie warunkowe”Nie są osobnym mechanizmem: to porty wyjściowe obarczone rolą, która steruje ich kolorem.
| Blok | Wyjścia |
|---|---|
| If | then / else |
| While, Do…While | then (treść pętli) |
| Assert | then (powodzenie) / else (niepowodzenie) |
| Retry | attempt / exhausted |
| Walidacja schematu | valid / invalid / errors |
| Switch | jeden port na każdy przypadek, plus default |
| Połączenie Socket.IO | jeden port na każde zadeklarowane zdarzenie, plus others |
Selektory połączeń
Section titled “Selektory połączeń”Połączenie może nieść selektor: ścieżkę stosowaną do przesyłanej wartości.
data.items[0].idbody['user-id']headers["content-type"]statusPrzyjmowane 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ć.