首页 > 解决方案 > 使用 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;
      });
    });
  });
}

任何想法可能出了什么问题?

亲切的问候,菲利克斯

标签: javascriptasynchronousindexeddbdexie

解决方案


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

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

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


推荐阅读