【发布时间】: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-anymorelet或const取决于你是否需要可变) -
一般来说,我会在 DOM 准备好之后调用所有脚本
-
OK 初始请求后关闭连接如下
createIndexDb(dbName).then(db => { dbVersion = db.version; database = db; db.close(); }).catch(console.error); -
记住:不要在 cmets 中添加额外的细节。 put them in your post.
标签: indexeddb