跳转到内容

端口与连线

理解端口,就是理解一个节点何时执行。本页是该模型的参考。

每个节点都有它们,而它们并不出现在节点配置中:

端口方向流类型作用
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
模式校验valid / 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 有时会自己推断出一个选择器,条件是来源有一份静态预览且它归结为 单个原始值。您随时可以替换或清空它。