如何解决如何在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 举报,一经查实,本站将立刻删除。