跳到主要内容

ConflictResolution

type ConflictResolution =
| {
type: "KEEP_LOCAL";
}
| {
type: "KEEP_REMOTE";
}
| {
merged: Record<string, unknown>;
type: "MERGE";
}
| {
type: "DEFER";
};

Defined in: packages/rxdb/src/sync-contract/conflict.ts:47

冲突解决结果

Remarks​

运行时能自动应用的只有 KEEP_LOCAL 与 KEEP_REMOTE。

返回 MERGE 或 DEFER 时,pull 会派发 ConflictPendingEvent 交出待处理的 冲突清单,然后整轮抛错回滚 —— 本地不落库、水位线不推进。这不是缺陷兜底而是刻意的 fail-closed:水位线是单调游标,跳过一条变更去推进它,那条变更就永久丢失, 而引擎没有逐实体的挂起冲突存储来接住它。

因此 PullResult.conflictsDeferred 在成功返回的结果里恒为 0。

想做三方合并或交互式选择,正确的用法是:拿到 ConflictPendingEvent 后在应用侧 完成合并、把结果作为一次普通的本地写入,再重新 pull(),此时解决器返回 KEEP_LOCAL / KEEP_REMOTE 即可收敛。