indexeddb 调用堆栈的无效状态错误?
indexeddb Invalid state error by call-stack?
再次,我对 indexeddb 有一些疑问。我收到
InvalidStateError: A Mutation operation was attempted on a database
that did not allow mutations.
还有一个
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 函数中调用这个函数。这可能是问题所在吗?
什么是this.link
?这可能是问题所在。您需要在 indexedDB.open
请求创建的数据库实例上执行 createObjectStore
。因此,无论是 this.req.result.createObjectStore
还是(如果您更改为 this.req.onupgradeneeded = function (e) {
),您都可以使用 e.target.result.createObjectStore
.
更一般地说,我无法真正评论您的代码应该做什么,因为我只能看到一个片段,但每次调用时您如何递增版本看起来真的很奇怪。可能您实际上并不想这样做。您可能需要阅读更多文档。
再次,我对 indexeddb 有一些疑问。我收到
InvalidStateError: A Mutation operation was attempted on a database that did not allow mutations.
还有一个
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 函数中调用这个函数。这可能是问题所在吗?
什么是this.link
?这可能是问题所在。您需要在 indexedDB.open
请求创建的数据库实例上执行 createObjectStore
。因此,无论是 this.req.result.createObjectStore
还是(如果您更改为 this.req.onupgradeneeded = function (e) {
),您都可以使用 e.target.result.createObjectStore
.
更一般地说,我无法真正评论您的代码应该做什么,因为我只能看到一个片段,但每次调用时您如何递增版本看起来真的很奇怪。可能您实际上并不想这样做。您可能需要阅读更多文档。