#javascript #indexeddb
#javascript #indexeddb
Вопрос:
Я пытаюсь создать IndexedDB и по какой-то причине не могу вызвать onupgradeneeded, что означает, что я не могу создать свое хранилище объектов. Любая информация была бы очень полезна, вот код, который я использую:
const request = window.indexedDB.open('OriginInvestmentsFrontEnd', 1);
request.onerror = (event) => {
console.log('error: ', event);
};
request.onsuccess = (event) => {
console.log('success: ', event);
};
request.onupgradeneeded = (event) => {
console.log('onupgradeneeded: ', event);
const db = event.target.result;
db.createObjectStore('front-end-state');
};
Я пробовал использовать версии 1, 2, 3, 4 и 10 и 11 (ни одна из этих версий не была создана ранее.) Что бы я ни пытался, метод onupgardeneeded никогда не вызывается, я получаю только метод onsuccess . Что я здесь делаю не так? Насколько я понимаю, изменение версии должно вызвать onupgradeneeded, но это не так?
Комментарии:
1. если вы откроете инструменты разработки, какова текущая версия? или распечатайте свойство version в событии onsuccess
2. Версия всегда совпадает с любой версией, которую я ей назначил, что еще более странно. Он изменит версии, даже не запустив событие onupgradeneeded ….
3. Ваш код выглядит правильно, поэтому происходит что-то неочевидное. У вас есть другое подключение к базе данных, которое препятствует обновлению (следите за
onblocked
) — событие успеха также будет отложено, но, возможно, это не очевидно в вашем тестировании. Или, возможно, отладчик с точками останова, который подключает обработчик onupgradeneeded после срабатывания события?4. то же самое происходит и со мной, у вас есть какое-либо решение?
Ответ №1:
У меня была та же проблема, что и при изменении версии для вызова onupgradeneeded, но она не вызывалась
, но после исследования я получил одно решение
В моем случае соединение не приближалось, и именно поэтому оно не запускало onupgradeneeded, а вместо этого запускало триггер, request.onblocked
чтобы закрыть соединение request.onblocked
const request = window.indexedDB.open('OriginInvestmentsFrontEnd', 1);
db.onblocked = (event) => {
console.log('blocked ...', event); // in my case this was triggering
(event.target as any).result.close(); // so close the connection and it worked
};
request.onerror = (event) => {
console.log('error: ', event);
(event.target as any).result.close(); // Close the connection
};
request.onsuccess = (event) => {
console.log('success: ', event);
(event.target as any).result.close(); // Close the connection
};
request.onupgradeneeded = (event) => {
console.log('onupgradeneeded: ', event);
const db = event.target.result;
db.createObjectStore('front-end-state');
};