gpt4 book ai didi

javascript - 新创建数据库时 Indexeddb IDBDatabase 异常 11

转载 作者:行者123 更新时间:2023-11-30 10:39:04 26 4
gpt4 key购买 nike

我在使用 indexeddb 时遇到问题 - 我正在使用此方法打开和设置数据库

DBService.prototype.open = function (dbName, entity, cb) {
var self = this;
var req = indexedDB.open(dbName)
req.onsuccess = function(e) {
var v = 1;
DBService.storage.db = e.target.result;
var db = DBService.storage.db;
// We can only create Object stores in a setVersion transaction;
if (v != db.version) {
var setVrequest = db.setVersion(v);

setVrequest.onerror = function (err, stack) {
console.log(err, stack);
}

setVrequest.onsuccess = function(e) {
if(db.objectStoreNames.contains(entity)) {
db.deleteObjectStore(entity);
}

var store = db.createObjectStore(entity,
{keyPath: "timeStamp"});
e.target.transaction.oncomplete = function() {
console.log(db);
cb(db);
};
};
} else {
cb(db);
/*
req.transaction.oncomplete = function() {
cb(db);
*/
}
};

req.onerror = function (err, stack) {
console.log(err)
console.log(stack)
}
};

除了数据库从未打开的情况外,一切都很好。我还在得到

InvalidStateError: DOM IDBDatabase Exception 11

(当我控制台记录 req.error 时)

我知道这段代码现在很脏,我正在尝试一切。我保证,当它运行良好时,我会重构它!

谢谢!

最佳答案

我假设您只在 chrome 中使用此页面,因为其他浏览器不再支持 setVersion。

“除了数据库从未打开的情况外,一切正常。”到底是什么意思?有时 db.open 调用失败并调用 req.onerror?在任何情况下,您的错误事件处理程序都应该只接受一个参数,只传递一个错误,而不是堆栈。

您遇到的 InvalidStateError: DOM IDBDatabase Exception 11 异常的一个常见原因是在请求对象收到任何事件之前访问 req.error。例如,这段代码将抛出异常 11:

var request = indexedDB.open("some db");
console.log(request.error);

鉴于

var request = indexedDB.open("some db");
request.onerror = request.onsuccess = function(e) { console.log(request.error); };

不会抛出异常。

您可能还想添加 setVrequest.onblocked = function(e) { console.log("got blocked:"+ e); }; 只是为了让您知道被阻止的事件是否会给您带来麻烦。

关于javascript - 新创建数据库时 Indexeddb IDBDatabase 异常 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com