同样,我对indexeddb有一些疑问。我得到了
InvalidStateError:尝试对数据库进行Mutation操作 这不允许突变。
还有一个
AbortError
这是我的代码:
DB_LINK.prototype.pushStoreNumeric = function ()
{
// Saving Values
var _temp = 0;
var _version = this.link.version;
var _name = this.link.name;
var that = this;
var _objectStoreNames = this.link.objectStoreNames;
// Close DB
this.link.close();
this.state = 4;
// Reopen Database
this.req = indexedDB.open(_name,_version+1); // Abort error here
this.req.onupgradeneeded = function () {
that.state = 1;
// Get Number of object stores
_temp = _objectStoreNames.length;
if(_temp != 0)
{
// Already object stores: read highest value
_temp = parseInt(_objectStoreNames[_objectStoreNames.length - 1]);
}
that.link.createObjectStore(_temp); // InvalidStateError here
};
我已在发生错误的地方标记了每条评论。
首先出现InvalidStateError,然后是AbortError。
我在同一个数据库的另一个onsuccess函数中调用此函数。这可能是问题吗?
答案 0 :(得分:1)
什么是this.link
?那可能就是问题所在。您需要对createObjectStore
请求创建的数据库实例执行indexedDB.open
。因此,this.req.result.createObjectStore
或(如果您更改为this.req.onupgradeneeded = function (e) {
)可以使用e.target.result.createObjectStore
。
更一般地说,我无法评论你的代码应该做什么,因为我只能看到一个代码片段,但每次调用它时你如何增加版本看起来真的很奇怪。可能你实际上并不想这样做。您可能想要阅读更多文档。