在IndexedDB

时间:2016-08-22 05:30:18

标签: database web local-storage indexeddb

我正在尝试强制更新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事件。可能出现什么问题?

1 个答案:

答案 0 :(得分:3)

问题可能在于您设置的数据库变量'。你不能以你期望的方式做到这一点。您可能希望查看或了解有关编写异步代码的更多信息。一个完整的答案是非常冗长的,并且已经多次为这类问题写过。考虑使用indexedDB标记查看其他问题的一些答案。

非常简短,请确保您了解以下内容的工作原理:

var x = 1;
console.log(x);
setTimeout(function() {
  x = 2;
  console.log(x);
}, 0);
x = 3;
console.log(x);

你的代码是这样编写的,你希望看到123,但这打印出132.确保你理解为什么。