gateBulkWrite()
function gateBulkWrite<TResult>(request, run): TResult;
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/bulk-write-gate.ts:110
判定一次批量写,放行时才调用写原语工厂
Type Parameters
| Type Parameter | Description |
|---|---|
TResult | 写原语的返回类型;门禁原样透传,不做任何包装 |
Parameters
| Parameter | Type | Description |
|---|---|---|
request | BulkWriteGateRequest | 实体名、方法、目标类与能力位 |
run | () => TResult | 还没被调用的写原语工厂 |
Returns
TResult
run() 的返回值本身(同一个实例)
Throws
WorkingTreeWriteRejectedError 目标是版本化业务实体表且已启用提交能力时同步抛出;
此时 run 一次都不会被调用
Remarks
返回类型刻意是裸的 TResult 而不是 Observable<TResult>:门禁不知道返回的是 Observable,
于是它在类型上就无法 pipe、defer 或顺手订阅一下。既有 QueryCache 调用方没打算参与这个特性,
而这些操作会实实在在改掉它们的订阅语义——冷的变热、订阅两次只写一次、退订不再取消写入。
FR-046 的零行为差异对它们同样成立。
判定本身不在这里另写一份,直接问 classifyWriteEntrance。手写一份「批量写只拦 update」 之类的近似规则,第一处分叉就会出现在这里。
Example
upsertMany(entityName: string, rows: readonly Row[]): Observable<void> {
return gateBulkWrite(
{ entityName, operation: 'upsert_many', targetClass: this.classOf(entityName), capabilityEnabled: this.enabled },
() => this.#upsertMany(entityName, rows)
);
}