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
| Parameter | Type |
|---|---|
sources | SyncStateSources |
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
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
| Parameter | Type | Description |
|---|---|---|
refresh | () => void | 执行重算的回调,通常是 SyncManager.refreshPullableCount() 的包装 |
Returns
解绑函数
() => void
Remarks
与 bindPushableCount 同构、同理由:执行者跟随连接纪元(scoped 插件),
而本汇聚器跟随实例,只能由插件在安装时接上、在释放时解开。
回调不得抛出、不得返回待处理的拒绝:这里是即发即忘的信号跳板, 既没有调用方能接住错误,也没有位置能重试。错误处理归执行者自己。
bindPushableCount()
bindPushableCount(source$): () => void;
Defined in: packages/rxdb/src/sync-state.ts:164
接上 changelog 路径的待推数流,返回解绑函数
Parameters
| Parameter | Type | Description |
|---|---|---|
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
| Parameter | Type |
|---|---|
report | SyncConflictReport |
Returns
void
reportError()
reportError(error): void;
Defined in: packages/rxdb/src/sync-state.ts:257
上报本轮的一次失败
Parameters
| Parameter | Type |
|---|---|
error | unknown |
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
| Parameter | Type |
|---|---|
count | number |
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),适配器不许认识它 —— 反过来也一样。
没装历史插件时这里是无操作:待拉数本来就无人维护,请求一个没有归宿的重算
不该让实时订阅的恢复路径炸掉。