javascript - 使用 Dexie.js 处理请求队列异步
问题描述
我目前正在使用 Dexie.js 处理来自 IndexedDB 的“缓存”请求。起初,我将请求保存到 IndexedDB 队列中,以便一次全部刷新。不幸的是,我的条目发出后似乎无法删除。
我遵循了官方文档中的指南/示例,但我无法让它工作。我什至试图将它集中到一个带有 '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;
});
});
});
}
任何想法可能出了什么问题?
亲切的问候,菲利克斯
解决方案
要修改的回调必须是同步的,不能是异步的。如果你需要做异步工作,你必须先使用 toArray() 拉取现有条目,然后在内存中修改它们,完成后,使用 bulkPut() 更新它们。
在您的情况下,您正在处理一个队列。似乎涉及每个队列项的其他异步操作。
我建议您改为使用单独的函数,仅处理队列中的第一个项目,当处理成功时,删除该项目。然后异步调用该函数,直到队列为空。
推荐阅读
- google-app-engine - App Engine任务队列创建一批队列项目并在go lang中每10秒执行一次
- domain-driven-design - 根据依赖查找聚合 id
- javascript - react-paginate Css 没有得到反映
- json - 如何在 Swift 中的 Alamofire 中发送 body 参数?
- javascript - 保存并填充节点 js
- python - PyTorch:批量外加法
- ios - 输出不是我所期望的
- laravel - Laravel 在存储路径中制作目录返回 TRUE 但我没有目录
- offline - Ray - RLlib - 自定义环境错误 - 连续动作空间 - DDPG - 离线体验培训?
- ios - 如何在表格视图单元格内的 TextView 中使用动态类型