在 IndexedDB 中强制更新
Force update in IndexedDB
我正在尝试通过发送一个打开请求来强制更新 IndexedDB 中的数据库,其中当前数据库的版本号加一:
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
事件。可能出了什么问题?
问题可能出在您的 'databaseVariable' 设置上。你不能以你似乎期望的方式做到这一点。您可能想要查看或了解有关编写异步代码的更多信息。一个完整的答案很长,这种问题已经写过好几次了。考虑使用 indexedDB 标签查看其他问题的一些答案。
非常简单,确保您了解以下内容的工作原理:
var x = 1;
console.log(x);
setTimeout(function() {
x = 2;
console.log(x);
}, 0);
x = 3;
console.log(x);
你的代码是这样写的,你希望看到 123,但打印出 132。确保你理解原因。
我正在尝试通过发送一个打开请求来强制更新 IndexedDB 中的数据库,其中当前数据库的版本号加一:
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
事件。可能出了什么问题?
问题可能出在您的 'databaseVariable' 设置上。你不能以你似乎期望的方式做到这一点。您可能想要查看或了解有关编写异步代码的更多信息。一个完整的答案很长,这种问题已经写过好几次了。考虑使用 indexedDB 标签查看其他问题的一些答案。
非常简单,确保您了解以下内容的工作原理:
var x = 1;
console.log(x);
setTimeout(function() {
x = 2;
console.log(x);
}, 0);
x = 3;
console.log(x);
你的代码是这样写的,你希望看到 123,但打印出 132。确保你理解原因。