跳到主要内容

DesktopHostTransport

Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:21

renderer 与 host 之间的传输层。

Remarks​

刻意收得极窄:Electron 下由 preload 通过 contextBridge 暴露这两个方法, renderer 因此拿不到原始 ipcRenderer,也就无法向任意频道发消息。 换成 MessagePort 或 worker_threads 时只要满足同样的两个方法即可,客户端无需改动。

Methods​

request()​

request(payload): Promise<unknown>;

Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:32

发一条请求并等待应答。

Parameters​

ParameterTypeDescription
payload| DesktopHostFileRequest | DesktopHostRequest | DesktopPgliteRequest协议请求

Returns​

Promise<unknown>

host 的未校验应答负载

Remarks​

SQLite、文件与 PGlite 三族请求共用同一条通道:preload 暴露的方法名已被 e2e 的 bridgeKeys 断言冻结,另开一条等于新增方法。分派由 host 侧的路由按 kind 完成。


subscribe()​

subscribe(listener): () => void;

Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:39

订阅 host 主动推送的消息。

Parameters​

ParameterTypeDescription
listener(message) => void消息回调

Returns​

取消订阅的函数

() => void


subscriptionReady()?​

optional subscriptionReady(): Promise<void>;

Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:56

上一次 DesktopHostTransport.subscribe 触发的通道注册是否已经生效。

Returns​

Promise<void>

通道就绪时兑现;注册失败时以原始原因 reject

Remarks​

subscribe() 必须同步返回退订函数,所以它交不出「通道已经建好」这个时刻。 而 Tauri 的 listen 是异步的:注册落定之前 host 那边 emit 出去的变更事件 不会送到任何人手里。connect() 一返回调用方就开始写库,丢的恰好是建库后的第一批 变更,表现为「首屏不刷新」——所以就绪状态必须能被等待,而不是靠延时去赌。

省略即表示订阅在 subscribe() 返回时就已生效:Electron 侧的 ipcRenderer.on 是同步的,没有可等待的中间态,此处如实留空即可 (preload 的桥接键集被 e2e 的 bridgeKeys 断言冻结,也加不进来)。 传输层若是异步建通道,就必须实现它。