跳到主要内容

QueryTask<T, RT>

Defined in: packages/rxdb/src/repository/QueryTask.ts:103

查询任务实现

封装查询任务的创建和生命周期管理

  • 管理任务的刷新和销毁信号
  • 处理观察者的订阅和取消订阅
  • 维护实体类型依赖关系
  • 提供任务的首次运行和清理机制

Type Parameters​

Type ParameterDefault type
T extends EntityType-
RTunknown

Constructors​

Constructor​

new QueryTask<T, RT>(opt): QueryTask<T, RT>;

Defined in: packages/rxdb/src/repository/QueryTask.ts:246

Parameters​

ParameterType
optQueryTaskOptions<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​

ParameterType
resultRT

Returns​

Fingerprint[]


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​

ParameterType
dataRxDBEntityLocalEventData<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​

ParameterType
errunknown

Returns​

void


next()​

next(result, autoCache?): void;

Defined in: packages/rxdb/src/repository/QueryTask.ts:360

发送结果给所有观察者

Parameters​

ParameterTypeDefault valueDescription
resultRTundefined查询结果
autoCachebooleantrue是否自动缓存结果实体

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