为啥 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() 后返回旧数据?的主要内容,如果未能解决你的问题,请参考以下文章

Dexie:如何跨多个浏览器引用一个 dexie db?

为啥它在没有 PRAGMA AUTONOMOUS_TRANSACTION 的情况下工作

在 Quasar 中使用 Dexie 导出 IndexedDB 数据库

Dexie useLiveQuery hook 导致错误“TypeError: dexie.liveQuery is not a function”

Dexie 中 Table.bulkPut 在 .then() 中返回啥?

Dexie 不在生产版本中存储数据,但在开发版本中一切正常