Транзакция в IndexDB не запускается немедленно, если вызывается после того, как транзакция уже завершена

Я использую dexiejs для вставки данных в таблицу 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 ответа

Решение

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

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

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

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

Другие вопросы по тегам