跳到主要内容

RxDBPluginHistory

Defined in: packages/rxdb-plugin-history/src/plugin.ts:37

历史 / 撤销重做 / 分支插件。

Remarks​

不声明 inject:VersionManager.init() 只挂事件监听与订阅,一条适配器读写都不发。 声明 adapter:local 会把安装推到引导链之后,而 HistoryManager 的分支流必须在第一条 rxdb_change 事件到达之前就已经订阅上——装晚了,那一批变更不进历史。这也正是搬进插件 之前的时序:核心在构造器里 new VersionManager()、在 init() 里调 init(), 两者都早于 schemaManager.init()。

两处宿主改动都登记在 scope 上,断开连接时由宿主逆序释放:

  1. rxdb.versionManager 这个实例槽位 —— 释放时连同 destroy() 一起撤掉,不给下一个 纪元留一个指向已拆事件总线的管理器。槽位排在最先获取,因而最后撤,destroy() 才跑得在槽位仍可读的窗口里;
  2. RxDB.syncState 上的可推送计数订阅 —— 枢纽活得和实例一样长,计数却只在连接 期间有意义,因此走 bindPushableCount() 拿一个解绑函数,而不是在构造枢纽时传进去。

同一枢纽上的「重算待拉数」跳板不在这里:refreshPullableCount() 随 US-025 阶段 D 去了 @aiao/rxdb-plugin-sync,接住 requestPullableRefresh() 于是也是那个插件的活。 只装历史不装同步时那个请求发进空里,正是「没有同步就没有待拉数」的实情。

Extends​

Implements​

Constructors​

Constructor​

new RxDBPluginHistory(rxdb): RxDBPluginHistory;

Defined in: packages/rxdb/dist/rxdb-plugin.d.ts:137

Parameters​

ParameterType
rxdbRxDB

Returns​

RxDBPluginHistory

Inherited from​

RxDBPluginBase.constructor

Properties​

lifecycle​

readonly lifecycle: "scoped";

Defined in: packages/rxdb-plugin-history/src/plugin.ts:38

声明本插件已迁移到作用域拆卸。

Remarks​

取值为 'scoped' 时宿主释放完插件作用域就收手,不再调用 IRxDBPlugin.destroy。 双版本插件(既要能装进旧宿主又要能装进新宿主)两样都写:旧宿主不认识本字段、只会走 destroy();新宿主认识,于是只走作用域,两边都不会清理两次。

之所以要显式标记而不是去看 install.length 有没有形参:转译产物、Function.prototype.bind 与压缩器都会改写形参个数,把它当契约会误判。

Implementation of​

IRxDBPlugin.lifecycle


name​

name: Uncapitalize<string> = 'history';

Defined in: packages/rxdb-plugin-history/src/plugin.ts:39

插件名,用于日志与宿主侧的错误归因

Implementation of​

IRxDBPlugin.name


rxdb​

protected readonly rxdb: RxDB;

Defined in: packages/rxdb/dist/rxdb-plugin.d.ts:136

Inherited from​

RxDBPluginBase.rxdb

Methods​

install()​

install(scope): void;

Defined in: packages/rxdb-plugin-history/src/plugin.ts:41

安装插件。

Parameters​

ParameterTypeDescription
scopeLifecycleScope本次连接纪元的插件激活作用域;一次 acquire() 只包一步可能抛错的获取

Returns​

void

Remarks​

抛错(含 Promise reject)视为安装失败:宿主会先把已经登记进 scope 的部分 逆序释放掉,再把原错误传播给 connect()。回滚期间的清理错误只记日志,不会盖掉安装错误。

实现方不写形参不破坏契约——install() 与 install(scope) 同样满足本接口。

Implementation of​

IRxDBPlugin.install