QueryTask<T, RT>
Defined in: packages/rxdb/src/repository/QueryTask.ts:103
查询任务实现
封装查询任务的创建和生命周期管理
- 管理任务的刷新和销毁信号
- 处理观察者的订阅和取消订阅
- 维护实体类型依赖关系
- 提供任务的首次运行和清理机制
Type Parameters
| Type Parameter | Default type |
|---|---|
T extends EntityType | - |
RT | unknown |
Constructors
Constructor
new QueryTask<T, RT>(opt): QueryTask<T, RT>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:246
Parameters
| Parameter | Type |
|---|---|
opt | QueryTaskOptions<T, RT> |
Returns
QueryTask<T, RT>
Properties
autoCache
readonly autoCache: boolean;
Defined in: packages/rxdb/src/repository/QueryTask.ts:172
是否把查询结果按实体或实体数组自动缓存
cacheKey
readonly cacheKey: string;
Defined in: packages/rxdb/src/repository/QueryTask.ts:166
destroy$
readonly destroy$: Observable<void>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:184
查询销毁流 当查询任务被销毁时触发
entityType
readonly entityType: T;
Defined in: packages/rxdb/src/repository/QueryTask.ts:167
getFingerprint
getFingerprint: (result) => Fingerprint[];
Defined in: packages/rxdb/src/repository/QueryTask.ts:238
结果指纹计算方法
Parameters
| Parameter | Type |
|---|---|
result | RT |
Returns
observerCount
observerCount: number = 0;
Defined in: packages/rxdb/src/repository/QueryTask.ts:223
观察者数量 记录当前有多少个订阅者正在监听此查询结果
observers
readonly observers: Set<Observer<RT>>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:153
观察者集合 存储所有订阅此查询结果的观察者
options
readonly options:
| EntityStaticType<T, "idType">
| FindOneOptions<T, RuleGroup<InstanceType<T>>, string>
| FindOneOrFailOptions<T, RuleGroup<InstanceType<T>>, string>
| FindOptions<T, RuleGroup<InstanceType<T>>, string>
| FindAllOptions<T, RuleGroup<InstanceType<T>>, string>
| FindByCursorOptions<T, RuleGroup<InstanceType<T>>, string>
| CountOptions<T, RuleGroup<InstanceType<T>>>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:217
查询选项
refresh$
readonly refresh$: Observable<number>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:178
刷新触发流 每次刷新时发送刷新次数,用于触发查询重新执行
refreshCount
refreshCount: number = 0;
Defined in: packages/rxdb/src/repository/QueryTask.ts:228
刷新次数 记录查询被刷新执行的总次数
relationEntityTypes
readonly relationEntityTypes: Set<EntityType>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:190
关联实体类型集合 存储查询中涉及到的所有关联实体类型
result?
optional result?: RT;
Defined in: packages/rxdb/src/repository/QueryTask.ts:233
查询结果 缓存的最新查询结果数据
result$
result$: Observable<RT>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:244
查询结果流 通过 Observable 发送查询结果的响应式流
resultEntityIds
readonly resultEntityIds: Set<EntityStaticType<T, "idType">>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:195
查询的实体 ID 集合
resultEntitySet
readonly resultEntitySet: Set<InstanceType<T>>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:201
查询的实体集合 存储查询结果中包含的所有实体实例
rxdb
readonly rxdb: RxDB;
Defined in: packages/rxdb/src/repository/QueryTask.ts:168
serialize
readonly serialize: (data) => InstanceType<T>;
Defined in: packages/rxdb/src/repository/QueryTask.ts:165
把一条本地实体事件的载荷还原成实体实例
Parameters
| Parameter | Type |
|---|---|
data | RxDBEntityLocalEventData<T> |
Returns
InstanceType<T>
Remarks
公开是因为自带合并管线的插件要用:@aiao/rxdb-plugin-tree 的 merge_create 直接调它
把命中的事件数据转成实体(query/merge_create.ts)。各插件自己写一份的代价不是重复,
是两套还原语义——本函数走的是 createEntityRef,认实体缓存,同一 id 还是同一个对象;
手搓一份 Object.assign 出来的实例绕过缓存,于是同一行在不同查询里成了两个对象。
type
readonly type:
| "find"
| "get"
| "findOne"
| "findOneOrFail"
| "findAll"
| "findByCursor"
| "count";
Defined in: packages/rxdb/src/repository/QueryTask.ts:212
查询类型
Remarks
从 QueryOptions 取,而不是另抄一份字面量联合。原先那份字面量里躺着
findDescendants / findNeighbors 这类插件任务类型——核心因此「认识」自己
并不实现的查询,插件新增一种任务还得回来改核心。改成索引取值后,
插件经 RepositoryQueryExtensions 的模块扩展并支,这里自动跟着变宽。
Methods
clean()
clean(): void;
Defined in: packages/rxdb/src/repository/QueryTask.ts:273
清理任务资源
Returns
void
Remarks
先完成观察者再拆管道:正常退订路径走到这里时 observers 已经空了,但
QueryManager.destroy() 会在仍有订阅者时清理任务 —— 不 complete() 的话
这些订阅者既收不到新数据也永远不会结束,toArray() / lastValueFrom() 之类
等终止信号的算子会永久挂起。
error()
error(err): void;
Defined in: packages/rxdb/src/repository/QueryTask.ts:368
发送错误给所有观察者
Parameters
| Parameter | Type |
|---|---|
err | unknown |
Returns
void
next()
next(result, autoCache?): void;
Defined in: packages/rxdb/src/repository/QueryTask.ts:360
发送结果给所有观察者
Parameters
| Parameter | Type | Default value | Description |
|---|---|---|---|
result | RT | undefined | 查询结果 |
autoCache | boolean | true | 是否自动缓存结果实体 |
Returns
void
refresh()
refresh(): void;
Defined in: packages/rxdb/src/repository/QueryTask.ts:375
手动刷新查询
Returns
void
run()
run(): void;
Defined in: packages/rxdb/src/repository/QueryTask.ts:303
首次运行查询任务
Returns
void