Перейти до вмісту

Порти та зв'язки

Зрозуміти порти — це зрозуміти, коли виконується блок. Ця сторінка є довідником моделі.

Їх має кожен блок, хоча в його конфігурації вони не з’являються:

ПортНапрямокПотікРоль
inВхідСигналТригер. Приймається кілька вхідних зв’язків
errorВихідЗначення + сигналМаршрут невдачі
doneВихідСигналНадсилається після завершення блоку і всього його підграфа нижче за течією

Три блоки не мають порту error: Вихід, Зараз і Retry (останній сам є межею помилок). Два не мають done: Вихід і Throw.

ПотікУявний символПоведінка
ЗначенняДаніПереносить значення; водночас слугує тригером
СигналТактНічого не переносить, лише запускає
ОбидваПереносить значення і запускає

Єдина заборонена комбінація: вихід чистого сигналу до входу чистого значення. Просто нічого було б покласти у значення.

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

Типізація здебільшого слугує візуальній зручності, з одним суворим винятком: вхід типу список (порт list дій Додати до списку й Видалити зі списку) відхиляє джерело, несумісне зі списком. json і list сумісні між собою; простий object — ні.

  • Вхідний порт приймає лише один зв’язок. Саме це робить граф читабельним: одне значення — одне походження.
  • Окрім in, який приймає скільки завгодно зв’язків.
  • Вихід може живити скільки завгодно входів.

Три правила, саме в такому порядку:

  1. Корені стартують. Будь-який блок без вхідних зв’язків запускається на початку сценарію. Блоку «старт» не існує.
  2. Очікуються лише під’єднані входи. Блок виконується, коли кожен із його справді з’єднаних вхідних портів отримав значення. Непід’єднаного порту ніколи не чекають. Значення запам’ятовуються: вхід зберігає останнє отримане значення.
  3. Порт in працює як бар’єр. Якщо його живлять кілька зв’язків, він чекає, поки надійдуть усі, а потім спрацьовує один раз. Це і є «дочекатися завершення цих трьох гілок» у цій моделі.

Виняток: повторювати на кожну подію

Section titled “Виняток: повторювати на кожну подію”

Параметр «Повторювати на кожну отриману подію» (контекстне меню блоку) перетворює всі під’єднані входи на неблокувальні логічні «або»: блок спрацьовує заново на кожне отримане значення, на будь-якому порту.

Два застосування: обробляти потік повідомлення за повідомленням і розблоковувати цикл завершення (граф, що замикається сам на себе).

done проти виходу значення

Section titled “done проти виходу значення”

Це найкорисніша на практиці відмінність:

  • вихід значення спрацьовує, щойно блок виробив свій результат;
  • done додатково чекає, поки завершиться все, що споживає цей результат.

Щоб задати послідовність — «зроби все це, а потім прибери» — з’єднуйте від done. Щоб передати дані, з’єднуйте від виходу значення.

Це не окремий механізм: це вихідні порти з певною роллю, яка задає їхній колір.

БлокВиходи
Ifthen / else
While, Do…Whilethen (тіло)
Assertthen (успіх) / else (невдача)
Retryattempt / exhausted
Перевірка схемиvalid / invalid / errors
Switchпо порту на кожен випадок плюс default
З’єднання Socket.IOпо порту на кожну оголошену подію плюс others

Зв’язок може мати селектор — шлях, застосований до значення в дорозі.

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

Приймаються форми a.b, a[0], a['ключ'] і a["ключ"]. Сегмент, що містить JSON, розбирається на льоту; шлях, який ні до чого не веде, дає undefined.

Іноді Restorm виводить селектор самостійно під час з’єднання, коли джерело має статичний попередній перегляд, що зводиться до єдиного простого значення. Ви завжди можете його замінити чи очистити.