IDBTransaction 对象

IDBTransaction 对象用来异步操作数据库事务,所有的读写操作都要通过这个对象进行。

IDBDatabase.transaction()方法返回的就是一个 IDBTransaction 对象。

  1. var db;
  2. var DBOpenRequest = window.indexedDB.open('demo', 1);
  3. DBOpenRequest.onsuccess = function(event) {
  4. db = DBOpenRequest.result;
  5. var transaction = db.transaction(['demo'], 'readwrite');
  6. transaction.oncomplete = function (event) {
  7. console.log('transaction success');
  8. };
  9. transaction.onerror = function (event) {
  10. console.log('transaction error: ' + transaction.error);
  11. };
  12. var objectStore = transaction.objectStore('demo');
  13. var objectStoreRequest = objectStore.add({ foo: 1 });
  14. objectStoreRequest.onsuccess = function (event) {
  15. console.log('add data success');
  16. };
  17. };

事务的执行顺序是按照创建的顺序,而不是发出请求的顺序。

  1. var trans1 = db.transaction('foo', 'readwrite');
  2. var trans2 = db.transaction('foo', 'readwrite');
  3. var objectStore2 = trans2.objectStore('foo')
  4. var objectStore1 = trans1.objectStore('foo')
  5. objectStore2.put('2', 'key');
  6. 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。