我如何等到关闭IndexedDB实例?

问题描述 投票:4回答:2

IndexedDB方法关闭is synchronous,如何等待关闭完成?我的用例是,在自动测试之后关闭IndexedDB,然后在下一次测试之前,删除数据库并重新打开它。

我看到的问题是,有时indexedDB.deleteDatabase会触发阻止的事件,因为数据库尚未异步关闭(正如您从我链接到的deleteDatabase文档中所看到的那样)。我不能完全确定的是,即使发生了阻塞事件,在这种情况下数据库是否仍会删除。

javascript html indexeddb
2个回答
1
投票

您无需等待关闭完成的事件,只需关闭,删除数据库并重新打开它。

您可以在IndexedDB API文档中看到,close方法不会调度完成的事件,而数据库delete方法却可以。无论如何,您都不需要收听这些事件。


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();
}
© www.soinside.com 2019 - 2024. All rights reserved.