使用Dexie.js处理请求队列异步

时间:2019-06-23 13:29:55

标签: javascript asynchronous indexeddb dexie

我目前正在使用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;
      });
    });
  });
}

有什么想法可能出了什么问题吗?

亲切的问候, 费利克斯

1 个答案:

答案 0 :(得分:1)

要修改的回调必须是同步的,并且不能是异步的。 如果需要进行异步工作,则必须先使用toArray()拉取现有条目,然后在内存中对其进行修改,完成后,使用bulkPut()对其进行更新。

在您的情况下,您正在处理队列。似乎每个队列项目都涉及其他异步操作。

我建议您改为使用一个单独的功能,该功能仅处理队列中的第一个项目,如果处理成功,则删除该项目。然后异步调用该函数,直到队列为空。