## 第七节:IDBTransaction 对象
`IDBTransaction` 对象用来异步操作数据库事务,所有的读写操作都要通过这个对象进行。
`IDBDatabase.transaction()`方法返回的就是一个`IDBTransaction`对象。
~~~
var db;
var openRequest = window.indexedDB.open('demo', 1);
openRequest.onsuccess = function(event) {
db = openRequest.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`。
- 第一章:音视频
- 第一节:概述
- 第二节:媒体元素
- 第三节:视频元素
- 第四节:音频元素
- 第四节:事件
- 第二章:高德地图
- 第三章:Storage 接口
- 第一节:概述
- 第二节:属性和方法
- 第三节:事件
- 第四章:IndexedDB
- 第一节:概述
- 第二节:基本概念
- 第三节:indexedDB 对象
- 第四节:IDBRequest 对象
- 第五节:IDBDatabase 对象
- 第六节:IDBObjectStore 对象
- 第七节:IDBTransaction 对象
- 第八节:IDBIndex 对象
- 第九节:IDBCursor 对象
- 第十节:IDBKeyRange 对象
- 第十一节:操作流程
- 第五章:Canvas
- 第一节:概述
- 第二节:绘制图像
- 第一课时:路径
- 第二课时:线型
- 第三课时:矩形
- 第四课时:弧线
- 第五课时:文本
- 第六课时:渐变色和图像填充
- 第七课时:阴影
- 第三节:图像处理
- 第一课时:写入图像
- 第二课时:像素读写
- 第三课时:保存和恢复
- 第四课时:画布
- 第五课时:图像变换
- 第四节:元素方法
- 第一课时:toDataURL()
- 第二课时:toBlob()
- 第五节:使用实例
- 第一课时:动画效果
- 第二课时:像素处理