跳到內容

連接埠與連結

搞懂連接埠,就等於搞懂一個方塊什麼時候會執行。本頁是這套模型的參考。

每個方塊都有它們,而它們不會出現在方塊的設定裡:

連接埠方向用途
in輸入訊號觸發器。可接受多條進入的連結
error輸出值 + 訊號失敗路徑
done輸出訊號在方塊以及它下游的整個子圖都完成後發出

有三個方塊沒有 error 連接埠:輸出現在Retry(後者本身就是一道 錯誤邊界)。有兩個沒有 done輸出Throw

心裡的符號行為
一筆資料傳遞一個值;同時也充當觸發器
訊號一記脈衝什麼都不傳遞,只負責觸發
兩者皆是既傳遞一個值負責觸發

唯一被禁止的組合:從純訊號的輸出接到純值的輸入。那樣值裡就沒有東西 可放了。

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

型別主要是為了視覺上的方便,但有一個嚴格的例外:清單型別的輸入(新增至清單從清單移除動作的 list 連接埠)會拒絕與清單不相容的來源。jsonlist 彼此相容;單純的 object 則不相容。

  • **一個輸入連接埠只接受一條連結。**這正是讓整張圖易讀的原因:一個值,一個 來源。
  • 只有 in 例外,它要幾條連結都可以。
  • 一個輸出可以餵給任意多個輸入。

三條規則,依序如下:

  1. **根節點會自行啟動。**任何沒有進入連結的方塊,都會在情境啟動時被引動。這裡 沒有「起點」方塊。
  2. 只有已接線的輸入才會被等待。當一個方塊實際接上線的每個輸入連接埠都 收到值時,它就會執行。沒接線的連接埠永遠不會被等待。值會被記住:一個輸入會 保留它最後收到的值。
  3. in 連接埠會形成屏障。當它由多條連結餵入時,它會等到全部都抵達,然後 觸發一次。這就是這套模型裡「等這三個分支都跑完」的做法。

「每收到一個事件就重跑」選項(在方塊的右鍵選單中)會把所有已接線的輸入變成 不阻塞的「或」閘:方塊會在任何連接埠收到每一個值時就重新觸發。

它有兩種用途:一則一則地處理串流,以及解開完成迴圈(一張自己繞回自己的圖)的 死結。

這是實務上最有用的一項區別:

  • 值輸出會在方塊產出結果的那一刻就發出;
  • done 還會額外等到所有消費這個結果的東西都結束。

要排出先後順序 — 「先把這些全做完,然後清理」 — 請從 done 接線。要傳遞一筆 資料,請從值輸出接線。

它們並不是一套獨立的機制:它們就是帶著某個角色的輸出連接埠,而那個角色決定了 它們的顏色。

方塊輸出
Ifthen / else
WhileDo…Whilethen(迴圈主體)
Assertthen(成功)/ else(失敗)
Retryattempt / exhausted
Schema validatevalid / invalid / errors
Switch每個案例一個連接埠,再加上 default
Socket.IO 連線每個宣告的事件一個連接埠,再加上 others

一條連結可以帶一個選擇器:套用在傳遞中的值之上的路徑。

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

a.ba[0]a['clé']a["clé"] 這幾種寫法都可以接受。含有 JSON 的路徑 片段會即時解析;完全對不上任何東西的路徑會得到 undefined

在接線時,如果來源有一份靜態預覽而且它縮減成單一個原始值,Restorm 有時會自己 推導出一個選擇器。您隨時都可以替換它或把它清空。