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

Posted

技术标签:

【中文标题】Dexie 中 Table.bulkPut 在 .then() 中返回啥?【英文标题】:What is returned in .then() for Table.bulkPut in Dexie?Dexie 中 Table.bulkPut 在 .then() 中返回什么? 【发布时间】:2021-09-27 20:10:43 【问题描述】:

我正在为我的 web 应用程序使用 Dexie。但是,从文档中我无法获得 bulkPut 成功返回的确切信息。

例如: 假设在我的数据库中,我有三个 ID 为 1、3 和 5 的对象。例如,我将其显示为整数数组:DB = [1, 3, 5]。

我的应用程序已要求服务器将服务器中的所有项目提供给我。我收到了一个包含四个对象的数组:result = [2, 3, 4, 5]。 2 和 4 是新项目,3 与我的数据库中的 3 相同,但已修改。 5 未修改,因此等于我的 DB 对象。

我希望 bulkAdd 和 bulkPut 的输出如下:

当我在捕获错误的地方使用 Table.bulkAdd(result, allKeys: true) 时,我期望得到以下结果: 我的数据库包含: [1, 2, 3, 4, 5] 并且我的 .then() 将返回一个承诺,其中包含 id 2 和 4。

当我在捕获错误的地方使用 Table.bulkPut(result, allKeys: true) 时,我希望得到以下结果: 我的数据库包含: [1, 2, 3, 4, 5] 并且我的 .then() 将返回一个承诺,其中包含 id 的 2、3 和 4。因为5 没有被修改,因此没有被替换。

我希望方法的承诺只返回实际添加/修改的值的键。这个假设正确吗?因为实际上这不是我的应用程序中发生的情况。 在我的应用程序中,我使用了 bulkPut(这样我就可以使用一种方法添加和更新我的数据),但不知何故,它总是返回 2 个项目键,而不管输入是包含已修改项目还是现有项目的数组。

【问题讨论】:

【参考方案1】:

bulkPut() 带有选项 allKeys: true 返回一个与给定输入数组长度相同的数组。无论 put 操作是否会产生新的、更新的或相同的数据,都会返回所有键。如果发生异常并且您捕获它,您将只有错误对象。

【讨论】:

我在用例中缺少 allKeys 选项,并收到了一个包含 2 个键的数组。这让我很困惑,但现在我明白了。我正在使用复合 PK,因此 bulkPut 返回了一个包含两个键的数组。谢谢!

以上是关于Dexie 中 Table.bulkPut 在 .then() 中返回啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

为啥 Dexie 在 transaction() 中 modify() 后返回旧数据?

在 JavaScript 文件中添加 Dexie.js 查询会提示缺少类型

Quasar Q 表和数组中的数据(IndexedDB 和 Dexie)

有没有更好的方法可以使用 dexie 在 svelte 中编写此代码?