SyncBranchesResult
Defined in: rxdb-plugin-sync/src/sync-branches.ts:19
SyncManager.syncBranches 一轮的结果。
Remarks
created + updated + skipped.length 不一定等于 total:本地已有、且早已标了 remote 的
分支既不计 updated,也不进 skipped。
Properties
created
created: number;
Defined in: rxdb-plugin-sync/src/sync-branches.ts:21
本轮在本地新建的远端分支数。
skipped
skipped: string[];
Defined in: rxdb-plugin-sync/src/sync-branches.ts:43
本轮未创建的远端分支 id —— 具体原因见同一个 id 在 skipReasons 里的条目。
一条分支被跳过,可能是它自己的问题(id 不可用、或分叉点变更还没拉到本地翻译不出本地
id),也可能单纯因为它的父本轮被跳过——后一种情形下这条分支自身完全合格,但父本轮
不会落库,若仍然照常创建,它的 parentId 就是一条指向「本轮不存在的父」的悬空外键
(rxdb_branch.parentId 是 PRAGMA defer_foreign_keys 延迟到 COMMIT 才检查的外键,
届时会回滚整个事务,连同本轮所有本该成功的分支)。三种成因统一走同一条 skipped
通道,因为对调用方而言处理方式是一样的:这个 id 本轮没有对应的本地分支,仅此而已。
跳过不留持久标记:每轮都全量重拉远端分支、从头再判一遍,skipped 与
skipReasons 只报这一轮。unresolved-from-change-id 在分叉点变更拉到本地后自愈,
挂在它下面的 ancestor-skipped 随之自愈;invalid-id 则远端不改就每轮重拉、重跳,
一直占位——调用方要区分这两类,看 skipReasons。要不要记一个持久的「已知坏行」
标记,登记在 requirements/roadmap.md「epic-006 评审顺延的架构项」。
skipReasons
skipReasons: Record<string, SyncBranchSkipReason>;
Defined in: rxdb-plugin-sync/src/sync-branches.ts:52
skipped 里每一个 id 对应的具体跳过原因;key 覆盖 skipped 的每一项,一一对应。
单开一个字段而不是把原因塞进 skipped 数组本身:skipped: string[] 这个形状已经被
外部当「id 列表」消费,改成对象数组是破坏性变更;Record<id, reason> 是纯增量,
只读 skipped 的既有调用方不受影响。
total
total: number;
Defined in: rxdb-plugin-sync/src/sync-branches.ts:25
远端本轮交回的分支总数,含被跳过的。
updated
updated: number;
Defined in: rxdb-plugin-sync/src/sync-branches.ts:23
本地已有、本轮补上 remote: true 标记的分支数。