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
| Parameter | Type | Description |
|---|---|---|
entity | InstanceType<T> | 缓存中的实体实例 |
patch | Partial<InstanceType<T>> | 外部事件负载(增量字段) |
Returns
void