【发布时间】: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