在 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。确保你理解原因。