微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Dexie中添加多个嵌套对象键?

如何解决如何在Dexie中添加多个嵌套对象键?

我处于循环中,在其中我向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 Modify(): 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)

解决方法

Safari中存在一个错误,该错误会在低于3的dexie版本中击中Dexie的Modify方法。如果是这种情况,请将dexie升级到最新版本。如果不是那样,请尝试调试并在实际发生修改回调时确定。事务将无济于事,因为所有IDB操作都将通过事务进行,并且您所做的修改决不能覆盖其他事务。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。