跳到主要内容

SyncStateHub

Defined in: packages/rxdb/src/sync-state.ts:108

同步状态汇聚器

Remarks​

上游三条流只读;syncing / lastError / lastConflict 由回推链主动上报 (beginRound、reportError、reportConflict 等)。

destroy 只断开上游订阅,不关闭 state$ —— 关掉的话,销毁瞬间 还挂在上面的框架组件会读到一个已完成的流,渲染成空面板。保留最后一份快照更接近事实。

Example​

const sub = rxdb.syncState.state$.subscribe(state => {
banner.textContent = state.online ? `待推 ${state.pendingCount}` : '离线';
});

Constructors​

Constructor​

new SyncStateHub(sources): SyncStateHub;

Defined in: packages/rxdb/src/sync-state.ts:130

Parameters​

ParameterType
sourcesSyncStateSources

Returns​

SyncStateHub

Properties​

state$​

readonly state$: Observable<SyncState>;

Defined in: packages/rxdb/src/sync-state.ts:123

汇总快照流;订阅即得当前值

Accessors​

snapshot​

Get Signature​

get snapshot(): SyncState;

Defined in: packages/rxdb/src/sync-state.ts:126

当前快照,供不便订阅的同步读取场景使用

Returns​

SyncState

Methods​

beginRound()​

beginRound(): void;

Defined in: packages/rxdb/src/sync-state.ts:247

一轮回推开始

Returns​

void


bindPullableRefresh()​

bindPullableRefresh(refresh): () => void;

Defined in: packages/rxdb/src/sync-state.ts:209

接上「重算待拉数」的执行者,返回解绑函数

Parameters​

ParameterTypeDescription
refresh() => void执行重算的回调,通常是 SyncManager.refreshPullableCount() 的包装

Returns​

解绑函数

() => void

Remarks​

与 bindPushableCount 同构、同理由:执行者跟随连接纪元(scoped 插件), 而本汇聚器跟随实例,只能由插件在安装时接上、在释放时解开。

回调不得抛出、不得返回待处理的拒绝:这里是即发即忘的信号跳板, 既没有调用方能接住错误,也没有位置能重试。错误处理归执行者自己。


bindPushableCount()​

bindPushableCount(source$): () => void;

Defined in: packages/rxdb/src/sync-state.ts:164

接上 changelog 路径的待推数流,返回解绑函数

Parameters​

ParameterTypeDescription
source$Observable<number>待推数流,通常是 HistoryManager.pushableCount$

Returns​

解绑函数:断订阅并把这一路的读数清零

() => void

Remarks​

不是构造参数:changelog 路径整个住在 @aiao/rxdb-plugin-history 里(US-025 阶段 C), 它的生命周期是连接纪元(scoped 插件在 connect() 时安装、断连时随作用域逆序释放), 而本汇聚器跟随实例、跨断连存活 —— 面板要在断连期间继续显示上一份读数。 两者寿命不同,只能由插件在安装时接上、在释放时解开。

解绑时清零而不是保留最后一个数:插件都拆了,那个数字背后已经没有任何东西在维护它; 留着会让「没装历史插件」和「装了但一条都没待推」在面板上长得一模一样。 QueryCache 出站数走 reportOutboxCount,不受这里影响。


destroy()​

destroy(): void;

Defined in: packages/rxdb/src/sync-state.ts:272

断开上游订阅;state$ 保留最后一份快照

Returns​

void


endRound()​

endRound(): void;

Defined in: packages/rxdb/src/sync-state.ts:252

一轮回推结束,无论成败

Returns​

void


reportConflict()​

reportConflict(report): void;

Defined in: packages/rxdb/src/sync-state.ts:267

上报一次冲突判定

Parameters​

ParameterType
reportSyncConflictReport

Returns​

void


reportError()​

reportError(error): void;

Defined in: packages/rxdb/src/sync-state.ts:257

上报本轮的一次失败

Parameters​

ParameterType
errorunknown

Returns​

void


reportOfflineWrite()​

reportOfflineWrite(): void;

Defined in: packages/rxdb/src/sync-state.ts:241

上报一次离线写入队

Returns​

void

Remarks​

写路径只知道自己刚排了一条,不知道总数 —— 为了一个确定的 +1 再去数一遍全表, 是拿一次库读换一个已知的答案。权威值由回推收尾时的重算给出。


reportOutboxCount()​

reportOutboxCount(count): void;

Defined in: packages/rxdb/src/sync-state.ts:230

上报 QueryCache 路径当前的出站待推数(绝对值)

Parameters​

ParameterType
countnumber

Returns​

void

Remarks​

这个数只在两个时机会变:离线写入队(reportOfflineWrite),以及一轮回推 推进了水位线。两处都会上报,因此「按事件上报」在这里是完备的,而不是对实时流的将就。

与 reportOfflineWrite 的分工:那个只知道「又多一条」,这个是回推收尾时 重数一遍的权威值,会把此前累加出来的数整个覆盖掉。


reportSuccess()​

reportSuccess(): void;

Defined in: packages/rxdb/src/sync-state.ts:262

上报一轮全程无失败,清掉上一次的错误

Returns​

void


requestPullableRefresh()​

requestPullableRefresh(): void;

Defined in: packages/rxdb/src/sync-state.ts:192

请求重算待拉数

Returns​

void

Remarks​

由远端适配器在实时订阅恢复后调用(@aiao/rxdb-adapter-supabase 的 SUBSCRIBED 回调):断线期间远端攒下的变更本地一条都没听见,重新订阅只保证 「从现在起听得见」,不补历史,所以必须回头按各仓库的水位线重数一遍。

只是个请求,不是执行。真正重数的那段逻辑要读各仓库的同步记忆,整个住在 @aiao/rxdb-plugin-history 里(US-025 阶段 C),适配器不许认识它 —— 反过来也一样。 没装历史插件时这里是无操作:待拉数本来就无人维护,请求一个没有归宿的重算 不该让实时订阅的恢复路径炸掉。