首页 > 解决方案 > indexedDb 无法创建对象存储

问题描述

我创建了一个示例应用程序来创建 indexeddb,该应用程序一直工作到昨天,但不确定发生了什么问题,商店没有被创建。有人可以帮忙吗。这是相同的小提琴。我还创建了一种从商店中删除数据的方法,该方法也不起作用

https://jsfiddle.net/ojm10u4k/

var dbName = "bmiDb1";
var database;
var lookupType = [];
var dbVersion = 0;
var storeData = [{
  LookupTypeId: 2,
  Name: 'Collision',
  Description: null
}, {
  LookupTypeId: 3,
  Name: 'Grounding',
  Description: null
}]

function createObjectStore(indexDbName, storeName, keyName) {
  var objectStore;
  var version = dbVersion + 1;
  dbVersion = version;
  var request = indexedDB.open(indexDbName, dbVersion);
  request.onupgradeneeded = function(event) {
    var database = event.target.result;
    if (!database.objectStoreNames.contains(storeName)) {
      objectStore = database.createObjectStore(storeName, {
        keyPath: keyName
      });
      try {
        objectStore.transaction.oncomplete = function(event) {
          // Store values in the newly created objectStore.
          var objectValueStore = database.transaction(storeName, "readwrite").objectStore(storeName);
          storeData.forEach(function(data) {
            objectValueStore.add(data);
          });
          database.close();
        }
        objectStore.transaction.commit();
      } catch (err) {}
    } else {}
  };
}

function createIndexDb(name) {
  return new Promise((resolve, reject) => {
    let request = indexedDB.open(name);
    request.onsuccess = (event) => resolve(event.target.result);
    request.onerror = (event) => reject(event.target.error);
  });
}
$(document).ready(function() {
  createIndexDb(dbName).then(db => {
    dbVersion = db.version;
    database = db;
  }).catch(console.error);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

标签: indexeddb

解决方案


这是关闭连接后的工作方式

createIndexDb(dbName).then(
 db => {
   dbVersion = db.version;
   database = db;
   db.close();
 }).catch(console.error);

推荐阅读