跳到主要内容

applyExternalEntityUpdate()

function applyExternalEntityUpdate<T>(entity, patch): void;

Defined in: packages/rxdb/src/query/merge-update.utils.ts:47

把外部事件的增量 patch 合并进缓存实体,且不记成用户的本地修改。

P0-004(UPDATE 路径):这里会走 EntityStatus.replace 的 Object.assign(this.target, patch)——绕过 Proxy、重设 _origin、_modified 归零。 若 patch 比实体缓存更旧,无论实体当前是脏是净都不能应用:脏实体会连同用户尚未保存的 编辑一起被打回;干净实体则会被静默回退到旧字段值、缓存的 updatedAt 水位倒退——同样是 数据丢失,只是没有「重新编辑成同一个值」这层触发条件。

判别式是纯粹的时间戳单调性(isStaleEventPayload),不再区分 modified 状态。曾经的顾虑 是 undo/redo 会写出比被替换行更旧的 updatedAt(HistoryManager 按 max(Date.now(), …) 重算,没参考实体当前的 updatedAt)——但 P1-011(2026-07-29)已经在适配器层 (switch-result.utils.ts 的 getSwitchUpdatedAt:当前时钟/已知候选值+1ms/进程内水位+1ms 三路取 max)把 undo/redo 改成写出单调递增的新时间戳,不再是"重放旧值",那条曾经推翻纯 时间戳守卫的实测前提已经不成立。

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterTypeDescription
entityInstanceType<T>缓存中的实体实例
patchPartial<InstanceType<T>>外部事件负载(增量字段)

Returns​

void