错误“在不允许突变的数据库上尝试了突变操作。” 在indexedDB中检索数据时

Ale*_*nov 5 javascript indexeddb

我有这个简单的示例代码:

var request = mozIndexedDB.open('MyTestDatabase');
request.onsuccess = function(event){
  var db = event.target.result;
  var request = db.setVersion('1.0');
  request.onsuccess = function(event){
    console.log("Success version.");
    if(!db.objectStoreNames.contains('customers')){
      console.log("Creating objectStore");
      db.createObjectStore('customers', {keyPath: 'ssn'});
    }
    var transaction = db.transaction([],  IDBTransaction.READ_WRITE, 2000);
    transaction.oncomplete = function(){
      console.log("Success transaction");
      var objectStore = transaction.objectStore('customers');
    };
  };
};
Run Code Online (Sandbox Code Playgroud)

我得到这个:

在不允许突变的数据库上尝试了突变操作。”代码:“ 6

在线

var objectStore = transaction.objectStore('customers');
Run Code Online (Sandbox Code Playgroud)

不知道-我做错了什么?

小智 7

您只能在版本更改事务中创建或删除对象存储

请参阅:https ://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase


Ale*_*nov 5

我想我找到了答案。我不应该在 oncomplete 中访问 objectStore。我只需要在进行新交易后进行即可。正确的方法是这样的:

var transaction = db.transaction([],  IDBTransaction.READ_WRITE, 2000);
    transaction.oncomplete = function(){
      console.log("Success transaction");
    };
var objectStore = transaction.objectStore('customers');
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这正是 Mozilla 的 MDN 所显示的。https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB#section_10