如果我现在进入浏览器的控制台(正在使用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); };
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句