Принудительное обновление в IndexedDB
Я пытаюсь принудительно обновить базу данных в IndexedDB, отправив открытый запрос с номером версии текущей базы данных, увеличенным на единицу:
var openRequest = indexedDB.open("db-name", dbVariable.version + 1);
Однако событие onupgradeneeded
никогда не запускается, и openRequest
остается в состоянии pending
бесконечно.
Что я делаю не так?
Есть ли другой способ принудительно обновить базу данных в IndexedDB?
EDIT
Скажем, у меня есть функция connect2db
, которая принимает переменную version
:
function connect2db(version) {
var openRequest = indexedDB.open("database-name", version);
openRequest.onsuccess = function(e) {
databaseVariable = e.target.result;
}
openRequest.onupgradeneeded = function(e) {
databaseVariable = e.target.result;
// Do schema update...
}
}
И у меня есть еще одно обстоятельство, в котором я хотел бы обновить схему базы данных:
connect2db(databaseVariable.version + 1);
Предположим, что darabaseVariable
уже существует и указывает на базу данных
Когда я пробовал запустить код в этом формате, событие onupgradeneeded
никогда не срабатывает. Что может быть происходит не так?
1 ответ:
Проблема, вероятно, заключается в вашей установке "databaseVariable". Вы не можете сделать это так, как вы, кажется, ожидаете. Возможно, вы захотите просмотреть или узнать больше о написании асинхронного кода. Полный ответ очень длинен, и уже несколько раз был написан для этого типа вопроса. Рассмотрим некоторые ответы на другие вопросы с помощью тега indexedDB.
Очень кратко, убедитесь, что вы понимаете, как работает следующее:var x = 1; console.log(x); setTimeout(function() { x = 2; console.log(x); }, 0); x = 3; console.log(x);
Ваш код написан так, что вы ожидаете увидеть 123, но это выводит 132. Убедитесь, что вы понимаете, почему.