indexedDB.deleteDatabase()抛出错误

时间:2014-11-29 11:35:08

标签: javascript jasmine indexeddb

我正在尝试删除单元测试数据库:

var DeleteDb = indexedDB.deleteDatabase(dbName);

这段代码直接在茉莉花的firstEach中调用。 使用chrome devTools我可以看到DeleteDb.error具有以下值:

  

错误:[例外:DOMException:无法阅读'错误'来自' IDBRequest的财产':请求尚未完成。]

永远不会触发DeleteDb.onsuccess或DeleteDb.onerror。此外,我从来没有尝试过阅读错误'代码中的属性。

有人知道这个错误意味着什么,来自哪里或者我如何解决它?

更新 此代码有时仍然无法解决。它给了我与上面相同的错误。

<html>
    <head>
        <script>
        var deleteDb = window.indexedDB.deleteDatabase('fakeNonExistentDatabase');
        deleteDb.onsuccess = function() {
            console.log('complete');
        };
        </script>
    </head>
</html>

我仍然不确定为什么会这样。有时打开一个新标签或关闭另一个标签。 此外,它在删除onsuccess回调时永远不会出错

更新2 好吧,似乎代码实际上正常工作,但onsuccess事件永远不会被解雇,因为在chrome devtools中按F8时不会再触发任何事件。我现在得到的错误是:

  

未捕获的InvalidStateError:无法执行&#39;事务&#39; on&#39; IDBDatabase&#39;:数据库连接正在关闭。

我认为上面的错误消息是本帖中第一条错误消息的结果,但实际上是另一种方式。我可以在互联网上找到关于这个主题的几个页面,但是没有真正提供答案。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

同时检查onblocked。可能存在另一个数据库连接,使您的删除请求既不会成功也不会失败。

可以通过在已打开的连接上侦听onversionchange来避免此行为,并确保在触发该事件时关闭连接。

答案 1 :(得分:0)

好的,因为事实证明我的所有代码都很好但是第二次删除数据库的时间大约是10秒到几分钟。

您可以自己测试一下:the code in this post shows it

发生的事情是茉莉花默认情况下会在5秒后超时(我将此更改为更高的数字,但谁会认为我需要的时间很长)

浏览器: Chrome 39.0.2171.71 m

答案 2 :(得分:0)

确保删除时

  • 数据库创建的结果不为空
  • 关闭结果,然后删除
  • 通过您创建的同一连接删除

&#13;
&#13;
var init=function(){
	var request = this.connection.open(name,version);
	request.onupgradeneeded=function(e){
		var version=e.target.result;
	};
	request.onsuccess=function(e){
	   db.result=e.target.result;
	};
	request.onerror=function(e){
	};
};
var remove=function(){
	if (typeof db.result !== 'undefined') {
		db.result.close();
		return this.connection.deleteDatabase(version);
	}
}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这已经晚了5年,但以防万一还有更多像我这样的人...

close the connection删除数据库之前...