Skip to content

IndexedDB 事务与迁移:练习答案 ​

数据库版本与 schema ​

在 onupgradeneeded 中创建或升级 object store;业务读写不要放在升级回调之外猜测结构。升级脚本必须可重复判断 objectStoreNames.contains('items'),并为旧记录补默认字段。

事务作用域与提交 ​

在同一个 readwrite 事务中执行两次 put,以 tx.oncomplete 记录持久化成功;任一 request 出错时观察 tx.onabort。第二次写入违反约束时,第一次写入也不会留下,这证明事务是原子的;单个 request 的 onsuccess 不是最终提交信号。

索引、游标与分页 ​

索引查询只按索引键筛选,记录主键仍由 store 决定。游标分页时保存上一次主键并设置 IDBKeyRange.lower(lastKey, true),否则翻页会重复第一条记录;答案应打印每页首尾键和总数。

阻塞、配额与恢复 ​

另一个标签页保持旧连接时,升级会触发 blocked;收到 versionchange 后关闭旧连接,升级方才继续。配额错误进入可恢复分支:删除可重建缓存、提示用户或降级到内存,而不是吞掉异常。

用心记录每一步成长