indexeddb调用堆栈的状态错误无效?

时间:2016-03-06 01:02:57

标签: javascript indexeddb

同样,我对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函数中调用此函数。这可能是问题吗?

1 个答案:

答案 0 :(得分:1)

什么是this.link?那可能就是问题所在。您需要对createObjectStore请求创建的数据库实例执行indexedDB.open。因此,this.req.result.createObjectStore或(如果您更改为this.req.onupgradeneeded = function (e) {)可以使用e.target.result.createObjectStore

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