【问题标题】: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 个项目键,而不管输入是包含已修改项目还是现有项目的数组。

【问题讨论】:

    标签: dexie


    【解决方案1】:

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

    【讨论】:

    • 我在用例中缺少 allKeys 选项,并收到了一个包含 2 个键的数组。这让我很困惑,但现在我明白了。我正在使用复合 PK,因此 bulkPut 返回了一个包含两个键的数组。谢谢!
    猜你喜欢
    • 2021-07-15
    • 2019-02-16
    • 2020-04-27
    • 2015-02-27
    • 2020-04-16
    • 2014-06-14
    • 2020-01-17
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多