Транзакция в 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, может быть занят очисткой после завершения транзакции. Если бы это было так, я полагаю, это происходило бы не после каждого запуска, а более спорадически.