为啥 Dexie 在 transaction() 中 modify() 后返回旧数据?
Posted
技术标签:
【中文标题】为啥 Dexie 在 transaction() 中 modify() 后返回旧数据?【英文标题】:Why does Dexie return old data after modify() in transaction()?为什么 Dexie 在 transaction() 中 modify() 后返回旧数据? 【发布时间】:2021-07-15 16:35:20 【问题描述】:我对数据库进行了更改并尝试读取更新的数据,但我使用以下代码获取了旧数据:
kera.db.transaction('rw', kera.db.settings, async () =>
await kera.db.settings.where('name').equals('background')
.modify([setting]: value);
await kera.db.settings.get('background', (data) =>
console.log(data);
);
);
如果我稍后调用相同的 get() 函数,这次我会得到更新的数据。
【问题讨论】:
【参考方案1】:我认为代码中可能存在其他问题。尝试捕捉被拒绝的交易承诺,看看你是否遇到了失败。还要验证闭包变量设置是否正确以及该值是否正确。通过该示例,您假设您的主键是name
。如果不是这种情况,您需要从 db.settings.get('background') 更改为 db.settings.get(name: 'background')。我试图重现这个问题,但它对我有用:
https://jsitor.com/CV_2VhVvB
【讨论】:
承诺没有被拒绝,也没有捕获到错误。另外,是的,主键是name
。由于您的代码与我的代码相似并且运行良好,因此我将检查代码的不同部分。【参考方案2】:
我清除了页面数据,它突然开始正常工作了。
【讨论】:
以上是关于为啥 Dexie 在 transaction() 中 modify() 后返回旧数据?的主要内容,如果未能解决你的问题,请参考以下文章
为啥它在没有 PRAGMA AUTONOMOUS_TRANSACTION 的情况下工作
在 Quasar 中使用 Dexie 导出 IndexedDB 数据库
Dexie useLiveQuery hook 导致错误“TypeError: dexie.liveQuery is not a function”