Table 未包含在父事务中 - Dexie
Table not included in parent transaction - Dexie
我已经编写了几个函数来使用 Dexie 包装器操作 indexedDB 中的数据。这是更新方法:
updateRow(documentId, rowId, row) {
this.db.transaction('rw', this.db.tableEntry, async () => {
await this.db.tableEntry.where({
documentId: documentId,
rowId: rowId
}).modify({row: row})
}).catch(e => {
console.log(e)
});
}
这个功能完全符合预期。以下功能在同一 class 中以相同的方式实现:
getAllByDocumentId(documentId, callBack) {
this.db.transaction('rw', this.db.tableEntry, async () => {
await this.db.tableEntry.where({
documentId: documentId,
}).toArray((entries)=>callBack(entries))
}).catch(e => {
console.log(e)
});
}
执行此方法会出现错误:
name: "SubTransactionError"
message: "Table tableEntry not included in parent transaction."
我该如何解决这个问题?错误背后的根本原因是什么?
我发现原因是,其他调用 类 执行包含事务的多个函数。因此,这些异步函数与它们的事务重叠。由于这个原因,只有第一个函数调用成功。我使用的简单方法是在调用时延迟函数的执行。
update(...);
setTimeout(getAllByDocumentId(...),200);
setTimeout(otherDBFunction(...),300);
然后它运行良好。
我已经编写了几个函数来使用 Dexie 包装器操作 indexedDB 中的数据。这是更新方法:
updateRow(documentId, rowId, row) {
this.db.transaction('rw', this.db.tableEntry, async () => {
await this.db.tableEntry.where({
documentId: documentId,
rowId: rowId
}).modify({row: row})
}).catch(e => {
console.log(e)
});
}
这个功能完全符合预期。以下功能在同一 class 中以相同的方式实现:
getAllByDocumentId(documentId, callBack) {
this.db.transaction('rw', this.db.tableEntry, async () => {
await this.db.tableEntry.where({
documentId: documentId,
}).toArray((entries)=>callBack(entries))
}).catch(e => {
console.log(e)
});
}
执行此方法会出现错误:
name: "SubTransactionError"
message: "Table tableEntry not included in parent transaction."
我该如何解决这个问题?错误背后的根本原因是什么?
我发现原因是,其他调用 类 执行包含事务的多个函数。因此,这些异步函数与它们的事务重叠。由于这个原因,只有第一个函数调用成功。我使用的简单方法是在调用时延迟函数的执行。
update(...);
setTimeout(getAllByDocumentId(...),200);
setTimeout(otherDBFunction(...),300);
然后它运行良好。