IndexedDB方法关闭is asynchronous,我怎么能等到关闭完成?我的用例是在自动化测试后关闭IndexedDB,然后在下一次测试之前,删除数据库并重新打开它。
我遇到的问题是,有时indexedDB.deleteDatabase会触发被阻止的事件,因为数据库尚未异步关闭(正如您从deleteDatabase的链接文档中看到的那样)。我不完全确定的是,如果在这种情况下数据库仍然被删除,尽管被阻止的事件被触发。
答案 0 :(得分:1)
您无需等待已完成的已完成事件,只需关闭,删除数据库并重新打开即可。
正如您在IndexedDB API doc中所看到的,close方法不会调度已完成的事件,但数据库删除方法会执行。无论如何,你不需要听这些事件。
答案 1 :(得分:1)
如果事务仍在运行,则无法关闭数据库,因此可能就是原因。你有类似的东西吗?
IndexedDB.open("mydb").onsuccess = function(e) {
db = e.target.result;
trans = db.transaction("someobjectstore");
os = trans.getObjectStore("someobjectstore");
os.put("blah");
db.close();
}
如果是这样,可能是交易仍在运行。
无论如何,如果你收到被阻止的事件......当它的所有连接都关闭时,数据库仍会被删除。
实例化与数据库的连接时,请确保已为生成的数据库分配了onversionchange处理程序。这可以帮助调试正在发生的事情。
IndexedDB.open("mydb").onsuccess = function(e) {
db = e.target.result;
db.onversionchange = function(e) {
console.log("got versionchange event: " + e);
}
trans = db.transaction("someobjectstore");
os = trans.getObjectStore("someobjectstore");
os.put("blah");
db.close();
}