Обработка асинхронных запросов в очереди с помощью Dexie.js - PullRequest
0 голосов
/ 23 июня 2019

В настоящее время я работаю над обработкой «кэшированных» запросов из IndexedDB с использованием Dexie.js. Сначала я сохраняю свои запросы в очереди IndexedDB, чтобы их можно было сбросить сразу. К сожалению, похоже, что я не могу удалить свои записи после их отправки.

Я следовал инструкциям / образцам из официальных документов , но просто не могу заставить его работать. Я даже пытался заключить его в транзакцию db.trw с 'rw'

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;
      });
    });
  });
}

Есть идеи, что могло пойти не так?

С уважением, Felix

1 Ответ

1 голос
/ 24 июня 2019

Обратный вызов для модификации должен быть синхронным и не может быть асинхронным.Если вам нужно выполнить асинхронную работу, вы должны сначала извлечь существующие записи с помощью toArray (), затем изменить их в памяти, а когда закончите, использовать bulkPut () для их обновления.

В вашем случае выобрабатывают очередь.Кажется, что он включает в себя другие асинхронные операции для элемента очереди.

Вместо этого я бы предложил вам иметь отдельную функцию, которая обрабатывает только первый элемент в очереди, когда процесс завершится успешно, удалите элемент.Затем вызывайте эту функцию asynchronicallt, пока очередь не станет пустой.

...