如果我现在进入浏览器的控制台(正在使用Chrome),请在此页面上输入
indexedDB.open("MyDB").onsuccess = function(e) { console.log("success"); };
我立即在控制台中收到“成功”消息。我可以做很多次,而且效果很好。但是如果我输入
indexedDB.deleteDatabase("MyDB").onsuccess = function(e) { console.log("success"); };
我没有收到“成功”消息。不仅如此,如果我再尝试再次调用
.open
,也不会收到“成功”消息。我该如何治愈这种由.deleteDatabase
引起的奇怪疾病,究竟发生了什么?(PS:就像我输入完这个答案一样,我认为从通话到
.deleteDatabase
的“成功”消息终于通过了,大约是在我拨打电话后的两分钟,但问题仍然存在)。 最佳答案
每次调用indexedDB.open时,都会建立与数据库的新连接。当您调用deleteDatabase时,所有这些打开的连接都将获得版本更改事件。他们每个人都可以侦听该事件并作为响应关闭其连接。那是您的第一选择。如果没有,则indexedDB.deleteDatabase(“whatever”)返回的请求将收到阻止事件。这就是您的情况。您的第二个选择是侦听被阻止的事件并在该处关闭连接:
var request = indexedDB.deleteDatabase("MyDB");
request.onsuccess = function(e) { console.log("success"); };
request.onblocked = function(e) {
console.log("blocked: " + e);
// Close connections here
};
request.onerror = function(e) { console.log("error: " + e); };