Не удалось выполнить ‘createObjectStore’ в ‘IDBDatabase’

#javascript #indexeddb

#javascript #indexeddb

Вопрос:

почему у меня ошибка?

Мой код:

 var idb = window.indexedDB ||      // Use the standard DB API
          window.mozIndexedDB ||   // Or Firefox's early version of it
          window.webkitIndexedDB;  // Or Chrome's early version

var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;

var dbName='nameDb';

var idbRequest=idb.open(dbName,'4.67' /*,dbDescription  */);

idbRequest.onsuccess=function (e) {
    debugger

    var db=e.target.result; 

    if (!db.objectStoreNames.contains('chat')){
        co=db.createObjectStore('chat',{'id':100});
    };

    if (!db.objectStoreNames.contains('iam')){
        co1=db.createObjectStore('iam');
    }; 
};

idbRequest.onerror = function (e) {
    debugger
};
 

Не удалось выполнить InvalidStateError: не удалось выполнить ‘createObjectStore’ в ‘IDBDatabase’: в базе данных не выполняется транзакция изменения версии. index.html:37
idbRequest.onsuccess

Комментарии:

1. «Що це за» — what does it mean? : D

2. Я понимаю, что все ваши комментарии ожидают этого 🙂

Ответ №1:

Вы не можете создать objectStore onsuccess метод in an. Вы можете сделать это только в upgradeneeded событии.

Цитата из документов:

Когда вы создаете новую базу данных или увеличиваете номер версии существующей базы данных (указывая более высокий номер версии, чем вы делали ранее, при открытии базы данных), onupgradeneeded событие будет запущено. В обработчике для этого события вы должны создать хранилища объектов, необходимые для этой версии базы данных

Смотрите документацию.

Комментарии:

1. Что делать, если не удалось заполнить данные в onupgradeneeded?

2. Итак, должен ли я выполнить проверку данных в onsuccess, если данные недействительны, затем откройте db с более высокой версией, чтобы снова запустить onupgradeneeded?