連接埠與連結
搞懂連接埠,就等於搞懂一個方塊什麼時候會執行。本頁是這套模型的參考。
三個隱含的連接埠
Section titled “三個隱含的連接埠”每個方塊都有它們,而它們不會出現在方塊的設定裡:
| 連接埠 | 方向 | 流 | 用途 |
|---|---|---|---|
in | 輸入 | 訊號 | 觸發器。可接受多條進入的連結 |
error | 輸出 | 值 + 訊號 | 失敗路徑 |
done | 輸出 | 訊號 | 在方塊以及它下游的整個子圖都完成後發出 |
有三個方塊沒有 error 連接埠:輸出、現在與 Retry(後者本身就是一道
錯誤邊界)。有兩個沒有 done:輸出與 Throw。
| 流 | 心裡的符號 | 行為 |
|---|---|---|
| 值 | 一筆資料 | 傳遞一個值;同時也充當觸發器 |
| 訊號 | 一記脈衝 | 什麼都不傳遞,只負責觸發 |
| 兩者皆是 | 既傳遞一個值又負責觸發 |
唯一被禁止的組合:從純訊號的輸出接到純值的輸入。那樣值裡就沒有東西 可放了。
any · json · number · string · boolean · duration · response ·
status · list · object。
型別主要是為了視覺上的方便,但有一個嚴格的例外:清單型別的輸入(新增至清單
與從清單移除動作的 list 連接埠)會拒絕與清單不相容的來源。json 與 list
彼此相容;單純的 object 則不相容。
- **一個輸入連接埠只接受一條連結。**這正是讓整張圖易讀的原因:一個值,一個 來源。
- 只有
in例外,它要幾條連結都可以。 - 一個輸出可以餵給任意多個輸入。
一個方塊什麼時候執行
Section titled “一個方塊什麼時候執行”三條規則,依序如下:
- **根節點會自行啟動。**任何沒有進入連結的方塊,都會在情境啟動時被引動。這裡 沒有「起點」方塊。
- 只有已接線的輸入才會被等待。當一個方塊實際接上線的每個輸入連接埠都 收到值時,它就會執行。沒接線的連接埠永遠不會被等待。值會被記住:一個輸入會 保留它最後收到的值。
in連接埠會形成屏障。當它由多條連結餵入時,它會等到全部都抵達,然後 觸發一次。這就是這套模型裡「等這三個分支都跑完」的做法。
例外:在每個事件上重跑
Section titled “例外:在每個事件上重跑”「每收到一個事件就重跑」選項(在方塊的右鍵選單中)會把所有已接線的輸入變成 不阻塞的「或」閘:方塊會在任何連接埠收到每一個值時就重新觸發。
它有兩種用途:一則一則地處理串流,以及解開完成迴圈(一張自己繞回自己的圖)的 死結。
done 與值輸出的對比
Section titled “done 與值輸出的對比”這是實務上最有用的一項區別:
- 值輸出會在方塊產出結果的那一刻就發出;
done還會額外等到所有消費這個結果的東西都結束。
要排出先後順序 — 「先把這些全做完,然後清理」 — 請從 done 接線。要傳遞一筆
資料,請從值輸出接線。
它們並不是一套獨立的機制:它們就是帶著某個角色的輸出連接埠,而那個角色決定了 它們的顏色。
| 方塊 | 輸出 |
|---|---|
| If | then / else |
| While、Do…While | then(迴圈主體) |
| Assert | then(成功)/ else(失敗) |
| Retry | attempt / exhausted |
| Schema validate | valid / invalid / errors |
| Switch | 每個案例一個連接埠,再加上 default |
| Socket.IO 連線 | 每個宣告的事件一個連接埠,再加上 others |
一條連結可以帶一個選擇器:套用在傳遞中的值之上的路徑。
data.items[0].idbody['user-id']headers["content-type"]statusa.b、a[0]、a['clé'] 與 a["clé"] 這幾種寫法都可以接受。含有 JSON 的路徑
片段會即時解析;完全對不上任何東西的路徑會得到 undefined。
在接線時,如果來源有一份靜態預覽而且它縮減成單一個原始值,Restorm 有時會自己 推導出一個選擇器。您隨時都可以替換它或把它清空。