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 在 transaction() 中 modify() 后返回旧数据?
在 JavaScript 文件中添加 Dexie.js 查询会提示缺少类型