【问题标题】:indexedDb unable to create object storeindexedDb 无法创建对象存储
【发布时间】:2021-11-08 04:40:11
【问题描述】:

我创建了一个示例应用程序来创建 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>

【问题讨论】:

  • 现代 JS 注意:你不需要 jQuery 的 ready,只需将你的脚本放在一个文件中,然后用 <script src="yourscripthere.js" async defer></script> 加载该文件。如果您从未见过defer,它只会在 DOM 完成后运行脚本,从而保证 DOM 查询正常工作。它已经存在了十多年,甚至 IE 都支持它 =) (另外,鉴于你正在使用承诺,是时候放手那些 var。使用 not-even-modern-anymore letconst 取决于你是否需要可变)
  • 一般来说,我会在 DOM 准备好之后调用所有脚本
  • OK 初始请求后关闭连接如下createIndexDb(dbName).then(db => { dbVersion = db.version; database = db; db.close(); }).catch(console.error);
  • 记住:不要在 cmets 中添加额外的细节。 put them in your post.

标签: indexeddb


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多