Не удается вызвать onupgradeneeded, независимо от того, сколько раз я меняю номер версии

#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');
};