## 第七節: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()
- 第五節:使用實例
- 第一課時:動畫效果
- 第二課時:像素處理