Порти та зв'язки
Зрозуміти порти — це зрозуміти, коли виконується блок. Ця сторінка є довідником моделі.
Три неявні порти
Section titled “Три неявні порти”Їх має кожен блок, хоча в його конфігурації вони не з’являються:
| Порт | Напрямок | Потік | Роль |
|---|---|---|---|
in | Вхід | Сигнал | Тригер. Приймається кілька вхідних зв’язків |
error | Вихід | Значення + сигнал | Маршрут невдачі |
done | Вихід | Сигнал | Надсилається після завершення блоку і всього його підграфа нижче за течією |
Три блоки не мають порту error: Вихід, Зараз і Retry (останній
сам є межею помилок). Два не мають done: Вихід і Throw.
Типи потоків
Section titled “Типи потоків”| Потік | Уявний символ | Поведінка |
|---|---|---|
| Значення | Дані | Переносить значення; водночас слугує тригером |
| Сигнал | Такт | Нічого не переносить, лише запускає |
| Обидва | Переносить значення і запускає |
Єдина заборонена комбінація: вихід чистого сигналу до входу чистого значення. Просто нічого було б покласти у значення.
Типи даних
Section titled “Типи даних”any · json · number · string · boolean · duration · response ·
status · list · object.
Типізація здебільшого слугує візуальній зручності, з одним суворим винятком:
вхід типу список (порт list дій Додати до списку й Видалити зі
списку) відхиляє джерело, несумісне зі списком. json і list сумісні між
собою; простий object — ні.
Арність
Section titled “Арність”- Вхідний порт приймає лише один зв’язок. Саме це робить граф читабельним: одне значення — одне походження.
- Окрім
in, який приймає скільки завгодно зв’язків. - Вихід може живити скільки завгодно входів.
Коли виконується блок
Section titled “Коли виконується блок”Три правила, саме в такому порядку:
- Корені стартують. Будь-який блок без вхідних зв’язків запускається на початку сценарію. Блоку «старт» не існує.
- Очікуються лише під’єднані входи. Блок виконується, коли кожен із його справді з’єднаних вхідних портів отримав значення. Непід’єднаного порту ніколи не чекають. Значення запам’ятовуються: вхід зберігає останнє отримане значення.
- Порт
inпрацює як бар’єр. Якщо його живлять кілька зв’язків, він чекає, поки надійдуть усі, а потім спрацьовує один раз. Це і є «дочекатися завершення цих трьох гілок» у цій моделі.
Виняток: повторювати на кожну подію
Section titled “Виняток: повторювати на кожну подію”Параметр «Повторювати на кожну отриману подію» (контекстне меню блоку) перетворює всі під’єднані входи на неблокувальні логічні «або»: блок спрацьовує заново на кожне отримане значення, на будь-якому порту.
Два застосування: обробляти потік повідомлення за повідомленням і розблоковувати цикл завершення (граф, що замикається сам на себе).
done проти виходу значення
Section titled “done проти виходу значення”Це найкорисніша на практиці відмінність:
- вихід значення спрацьовує, щойно блок виробив свій результат;
doneдодатково чекає, поки завершиться все, що споживає цей результат.
Щоб задати послідовність — «зроби все це, а потім прибери» — з’єднуйте від
done. Щоб передати дані, з’єднуйте від виходу значення.
Умовні гілки
Section titled “Умовні гілки”Це не окремий механізм: це вихідні порти з певною роллю, яка задає їхній колір.
| Блок | Виходи |
|---|---|
| If | then / else |
| While, Do…While | then (тіло) |
| Assert | then (успіх) / else (невдача) |
| Retry | attempt / exhausted |
| Перевірка схеми | valid / invalid / errors |
| Switch | по порту на кожен випадок плюс default |
| З’єднання Socket.IO | по порту на кожну оголошену подію плюс others |
Селектори зв’язків
Section titled “Селектори зв’язків”Зв’язок може мати селектор — шлях, застосований до значення в дорозі.
data.items[0].idbody['user-id']headers["content-type"]statusПриймаються форми a.b, a[0], a['ключ'] і a["ключ"]. Сегмент, що містить
JSON, розбирається на льоту; шлях, який ні до чого не веде, дає undefined.
Іноді Restorm виводить селектор самостійно під час з’єднання, коли джерело має статичний попередній перегляд, що зводиться до єдиного простого значення. Ви завжди можете його замінити чи очистити.