IDBTransaction 对象
IDBTransaction 对象用来异步操作数据库事务,所有的读写操作都要通过这个对象进行。
IDBDatabase.transaction()
方法返回的就是一个 IDBTransaction 对象。
var db;
var DBOpenRequest = window.indexedDB.open('demo', 1);
DBOpenRequest.onsuccess = function(event) {
db = DBOpenRequest.result;
var transaction = db.transaction(['demo'], 'readwrite');
transaction.oncomplete = function (event) {
console.log('transaction success');
};
transaction.onerror = function (event) {
console.log('transaction error: ' + transaction.error);
};
var objectStore = transaction.objectStore('demo');
var objectStoreRequest = objectStore.add({ foo: 1 });
objectStoreRequest.onsuccess = function (event) {
console.log('add data success');
};
};
事务的执行顺序是按照创建的顺序,而不是发出请求的顺序。
var trans1 = db.transaction('foo', 'readwrite');
var trans2 = db.transaction('foo', 'readwrite');
var objectStore2 = trans2.objectStore('foo')
var objectStore1 = trans1.objectStore('foo')
objectStore2.put('2', 'key');
objectStore1.put('1', 'key');
上面代码中,key
对应的键值最终是2
,而不是1
。因为事务trans1
先于trans2
创建,所以首先执行。
注意,事务有可能失败,只有监听到事务的complete
事件,才能保证事务操作成功。
IDBTransaction 对象有以下属性。
IDBTransaction.db
:返回当前事务所在的数据库对象 IDBDatabase。IDBTransaction.error
:返回当前事务的错误。如果事务没有结束,或者事务成功结束,或者被手动终止,该方法返回null
。IDBTransaction.mode
:返回当前事务的模式,默认是readonly
(只读),另一个值是readwrite
。IDBTransaction.objectStoreNames
:返回一个类似数组的对象 DOMStringList,成员是当前事务涉及的对象仓库的名字。IDBTransaction.onabort
:指定abort
事件(事务中断)的监听函数。IDBTransaction.oncomplete
:指定complete
事件(事务成功)的监听函数。IDBTransaction.onerror
:指定error
事件(事务失败)的监听函数。
IDBTransaction 对象有以下方法。
IDBTransaction.abort()
:终止当前事务,回滚所有已经进行的变更。IDBTransaction.objectStore(name)
:返回指定名称的对象仓库 IDBObjectStore。