我目前正在使用Dexie.js处理来自IndexedDB的“缓存”请求。首先,我将请求保存到IndexedDB队列中,然后立即将其全部刷新。不幸的是,似乎我的条目发送出去后无法删除。
我遵循了official docs中的指南/示例,但是我无法使其正常工作。我什至尝试使用'rw'将其预占为db.transaction
function flushQueue(){
queueRunning = true; // used to mimic singleton pattern
return db.queue.orderBy(':id').modify(async function(value){
var _this = this;
return deserializeRequest(value.serializedReq).then(async function(request){
return fetch(request).then(function(){
notifyClients("Request has been sent: ", request);
// deleting request from queue
delete _this.value;
});
});
});
}
有什么想法可能出了什么问题吗?
亲切的问候, 费利克斯
答案 0 :(得分:1)
要修改的回调必须是同步的,并且不能是异步的。 如果需要进行异步工作,则必须先使用toArray()拉取现有条目,然后在内存中对其进行修改,完成后,使用bulkPut()对其进行更新。
在您的情况下,您正在处理队列。似乎每个队列项目都涉及其他异步操作。
我建议您改为使用一个单独的功能,该功能仅处理队列中的第一个项目,如果处理成功,则删除该项目。然后异步调用该函数,直到队列为空。