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.

更一般地说,我无法真正评论您的代码应该做什么,因为我只能看到一个片段,但每次调用时您如何递增版本看起来真的很奇怪。可能您实际上并不想这样做。您可能需要阅读更多文档。