Транзакция в IndexDB не начинается немедленно, если она вызвана после того, как уже завершена - PullRequest
0 голосов
/ 09 января 2020

Я использую dex iejs для вставки данных в таблицу Indexdb (около 10 тыс. Записей).

После завершения транзакции rw, которую я проверяю следующими методами:

  try {
    await QDB.transaction("rw", table1, table1, async tx => {
      //ALSO CHECK TX
      tx.on("complete", () => console.log("COMPLETED"));
      //here goes the bulkadd code ...
    });
    console.log("COMPLETED");
  } catch (e) {
    console.log(e);
  }

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

Я даже отследил Весь процесс в профилировщике chrome и браузере выглядит относительно непринужденным за эти 20 с до начала последней транзакции.

Почему это так?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 14 января 2020

копирование комментария:

Я решил это, используя только одну транзакцию. Однако источником проблемы было то, что я использовал вложенную функцию asyn c с await Dex ie .waitFor (). Я думаю, что использование вложенных обещаний внутри waitFor вызывает внутренние обещания с некоторой задержкой

0 голосов
/ 10 января 2020

Как вы определяете, когда вторая транзакция «запускается» - это когда ваша первая операция в ней разрешена?

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

...