跳到主要内容

find_switch_branch_step()

function find_switch_branch_step(options): SwitchBranchStep[];

Defined in: packages/rxdb-plugin-history/src/find-switch-branch-step.ts:140

Internal

算出树上两个节点之间的切换路径

Parameters​

ParameterTypeDescription
optionsFindBranchPathOptions起点分支、目标分支、两侧当前变更 id,以及全量分支集合

Returns​

SwitchBranchStep[]

按执行顺序排好的步骤;两侧停在同一个变更 id 时为空数组

Throws​

RxDBError 父链成环或指向不存在的分支时(经 find_branch_path_to_root)

Remarks​

规则四条:

  1. 两个节点有共同祖先时,路径是「当前节点 → 共同祖先 → 目标节点」
  2. 没有共同祖先时,路径是「当前节点 → 根 → 目标节点」
  3. 路径里每个节点都要算出自己那一段的变更区间,即 fromChangeId → toChangeId
  4. changeId 在每条分支上都递增,所以逆向还原的那些步骤 fromChangeId > toChangeId, 正向应用的则相反——方向由这两个数的大小关系表达,步骤上没有第二个方向字段

有两处提前返回会跳过父链遍历——变更 id 相同时返回空步骤,同分支不同变更 id 时返回 单步——因此本函数不是父链完整性的检查点,理由见 find_branch_path_to_root。