再次,我對indexeddb有一些問題。 I'm得到一個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' _was_我的鏈接到數據庫,在我關閉它之前。我沒有在'this.link'中存儲新鏈接,這與'that.link'相等(因爲在所示代碼中'var that = this')。我通常想要做的就是使用這個功能,爲數據庫添加一個新的商店。數據庫中的商店有數字名稱(由我定義),現在這個代碼工作!而且,因爲我只能在versionchange事務中創建新的商店,所以我必須增加數據庫的版本 - 所以這是正確的。謝謝! – erik