我正在尝试强制更新IndexedDB中的数据库,方法是发送一个打开的请求,当前数据库的版本号加1:
var openRequest = indexedDB.open("db-name", dbVariable.version + 1);
但是onupgradeneeded
事件永远不会被触发,openRequest
无限期地处于pending
状态。
我做错了什么?
是否有其他方法可以强制更新IndexedDB中的数据库?
修改
假设我有一个函数connect2db
,它接受变量version
:
function connect2db(version) {
var openRequest = indexedDB.open("database-name", version);
openRequest.onsuccess = function(e) {
databaseVariable = e.target.result;
}
openRequest.onupgradeneeded = function(e) {
databaseVariable = e.target.result;
// Do schema update...
}
}
我还有另一种情况需要更新数据库架构:
connect2db(databaseVariable.version + 1);
假设darabaseVariable
已存在并指向数据库
当我尝试以此格式运行代码时,永远不会触发onupgradeneeded
事件。可能出现什么问题?
答案 0 :(得分:3)
问题可能在于您设置的数据库变量'。你不能以你期望的方式做到这一点。您可能希望查看或了解有关编写异步代码的更多信息。一个完整的答案是非常冗长的,并且已经多次为这类问题写过。考虑使用indexedDB标记查看其他问题的一些答案。
非常简短,请确保您了解以下内容的工作原理:
var x = 1;
console.log(x);
setTimeout(function() {
x = 2;
console.log(x);
}, 0);
x = 3;
console.log(x);
你的代码是这样编写的,你希望看到123,但这打印出132.确保你理解为什么。