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 即可收敛。