【问题标题】:How to add multiple nested object keys in Dexie?如何在 Dexie 中添加多个嵌套对象键?
【发布时间】:2021-01-20 04:07:15
【问题描述】:

我处于一个循环中,向 indexeddb 行添加了几个新键(大约 1 到 3 个)。 dexie 表如下:

{
    event_id: <event_id>
    <event data>
    groups: {
       <group_id> : { group_name: <name>, <group data> }
    }
}

我在循环中使用 Dexie 的 modify() 回调添加键:

newGroupNr++
db.event.where('event_id').equals(event_id).modify(x => x.groups[newGroupNr]=objData)

objData 是一个包含一些组属性的简单对象。

但是,这样当我添加两个或三个组时,实际上只有一个组写入数据库。我尝试将它们包装在 transaction() 中,但没有运气。

我觉得问题在于modify()-调用相互重叠,因为它们是异步运行的。不确定这是否属实,也不知道如何处理这种情况。

Dexie 修改(): https://dexie.org/docs/Collection/Collection.modify()

相关: Dexie : How to add to array in nested object

编辑:我发现了问题,它与 Dexie 无关。但是,我不完全理解为什么此修复程序有效,也许与 javascript 中的所有内容都通过引用而不是值传递有关?我的理论是整数 newGroupNr 值作为参考传递,并且在循环的下一次迭代中,在 Dexie 能够完成之前递增,从而有效地导致同一键的两次创建。这修复了它:

newGroupNr++
let newGroupNrLocal = newGroupNr
db.event.where('event_id').equals(event_id).modify(x => x.groups[newGroupNrLocal]=objData)

【问题讨论】:

    标签: dexie


    【解决方案1】:

    在 dexie 3 以下的版本中,Safari 中存在一个 bug,会影响 Dexie 的修改方法。如果是这种情况,请将 dexie 升级到最新版本。如果不是这样,请在实际发生修改回调时尝试调试并确定。事务无济于事,因为所有 IDB 操作都经过事务处理,您所做的修改绝不应覆盖另一个。

    【讨论】:

    • 不,我使用的是 Chrome,而不是 Safari,所以不是这样。
    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2021-10-01
    • 1970-01-01
    • 2023-01-12
    • 2022-11-02
    • 2022-12-17
    相关资源
    最近更新 更多