跳到主要内容

PushInFlightRegistry

Defined in: packages/rxdb-plugin-history/src/push-inflight.ts:48

「哪些变更此刻正在飞往远端」的进程内登记处。

Remarks​

存在的理由是一个时序缺口:撤销的判据是「还没推上去」,而这件事的数据源 RxDBSync.lastPushedChangeId 只在 push 提交时才写。push 的远端往返在事务之外, 于是「已经发出去了、水位线还没推进」这段窗口里,undo() 会放行一条其实已经到达 远端的变更。

撤销不产生新的变更行(undo-redo-apply.ts 只给原行打 revertChangeId 标记), 而出站查询过滤 revertChangeId = null —— 那条变更从此远端有、本地无,且没有任何 一次 push 会把这个差异送出去。本登记处把那段窗口填上:在飞即视同已推。

只覆盖本进程。 多 tab / Tauri 多进程共享同一份本地库时,另一个进程的 push 在这里是看不见的。跨进程要的是数据库里的一条租约行,而 push 路径目前整体就没有 跨进程互斥(两个进程会各自推同一批变更),那是另一个问题,不在这里假装解决。

Constructors​

Constructor​

new PushInFlightRegistry(): PushInFlightRegistry;

Returns​

PushInFlightRegistry

Methods​

session()​

session(): PushInFlightSession;

Defined in: packages/rxdb-plugin-history/src/push-inflight.ts:58

开一轮认领。

Returns​

PushInFlightSession

本轮的认领句柄;调用方必须在 finally 里 PushInFlightSession.release


snapshot()​

snapshot(): ReadonlyMap<string, number>;

Defined in: packages/rxdb-plugin-history/src/push-inflight.ts:80

当前全部在飞认领,按仓库取最大值。

Returns​

ReadonlyMap<string, number>

namespace:entity -> 正在飞的最大 change id;没有任何认领时是空 Map