transaction
方法在
IDBDatabase
interface imm
ediately returns a transaction object (
IDBTransaction
) containing the
IDBTransaction.objectStore
method, which you can use to access your object store.
IDBDatabase.transaction(storeNames); IDBDatabase.transaction(storeNames, mode);
"durability"
-- the durability constrints for the transction.
"default"
,
"strict"
,和
"relaxed"
.
storeNames
var transaction = db.transaction(['my-store-name']);
var transaction = db.transaction('my-store-name');
IDBDatabase.objectStoreNames
:
var transaction = db.transaction(db.objectStoreNames);
Passing an empty array will throw an exception.
mode
可选
readonly
,
readwrite
and
readwriteflush
(non-standard, Firefox-only.)
versionchange
mode can't be specified here. If you don't provide the parameter, the default access mode is
readonly
. To avoid slowing things down, don't open a
readwrite
transaction unless you actually need to write into the database.
readwrite
mode to change data, you would use the following:
var transaction = db.transaction('my-store-name', "readwrite");
As of Firefox 40, IndexedDB transactions have relaxed durability guarantees to increase performance (see
bug 1112702
), which is the same behaviour as other IndexedDB-supporting browsers. Previously in a
readwrite
transaction
IDBTransaction.oncomplete
was fired only when all data was guaranteed to have been flushed to disk. In Firefox 40+ the
complete
event is fired after the OS has been told to write the data but potentially before that data has actually been flushed to disk. The
complete
event may thus be delivered quicker than before, however, there exists a small chance that the entire transaction will be lost if the OS crashes or there is a loss of system power before the data is flushed to disk. Since such catastrophic events are rare most consumers should not need to concern themselves further.
注意
: In Firefox, if you wish to ensure durability for some reason (e.g. you're storing critical data that cannot be recomputed later) you can force a transaction to flush to disk before delivering the
complete
event by creating a transaction using the experimental (non-standard)
readwriteflush
mode (see
IDBDatabase.transaction
.) This is currently experimental, and can only be used if the
dom.indexedDB.experimental
pref is set to
true
in
about:config
.
details
可选
Dictionary of other settings, supported only by Chrome:
IDBTransaction
对象。
此方法可能引发
DOMException
of one of the following types:
| 异常 | 描述 |
|---|---|
I
nvalidStateError
|
close()
method has previously been called on this
IDBDatabase
实例。
|
NotFoundError
|
An object store specified in in the
storeNames
parameter has been deleted or removed.
|
TypeError
|
The value for the
mode
parameter is invalid.
|
InvalidAccessError
|
The function was called with an empty list of store names.
|
In this example we open a database connection, then use transaction() to open a transaction on the database. For a complete example, see our 待办通知 app ( 实时查看范例 )。
var db;
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = function(event) {
note.innerHTML += '<li>Database initialised.</li>';
// store the result of opening the database in the db variable.
// This is used a lot below
db = DBOpenRequest.result;
// Run the displayData() function to populate the task list with
// all the to-do list data already in the IDB
displayData();
};
// open a read/write db transaction, ready for adding the data
var transaction = db.transaction(["toDoList"], "readwrite");
// report on the success of opening the transaction
transaction.oncomplete = function(event) {
note.innerHTML += '<li>Transaction completed: database modification finished.</li>';
};
transaction.onerror = function(event) {
note.innerHTML += '<li>Transaction not opened due to error. Duplicate items not allowed.</li>';
};
// you would then go on to do something to this database
// via an object store
var objectStore = transaction.objectStore("toDoList");
// etc.
| 规范 | 状态 | 注释 |
|---|---|---|
|
索引数据库 API 2.0
The definition of 'transaction()' in that specification. |
推荐 | |
|
索引数据库 API 草案
The definition of 'transaction()' in that specification. |
推荐 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
transaction
|
Chrome
24
|
Edge 12 |
Firefox
16
|
IE 部分支持 10 | Opera 15 | Safari 7 | WebView Android Yes | Chrome Android 25 | Firefox Android 22 | Opera Android 14 | Safari iOS 8 | Samsung Internet Android 1.5 |
完整支持
部分支持
要求使用供应商前缀或不同名称。
IDBDatabase
IDBTransaction
IDBKeyRange
IDBObjectStore
IDBCursor
IDBDatabase
close()
createObjectStore()
deleteObjectStore()
transaction()
IDBCursor
IDBCursorSync
IDBCursorWithValue
IDBDatabaseException
IDBDatabaseSync
IDBEnvironment
IDBEnvironmentSync
IDBFactory
IDBFactorySync
IDBIndex
IDBIndexSync
IDBKeyRange
IDBObjectStore
IDBObjectStoreSync
IDBOpenDBRequest
IDBRequest
IDBTransaction
IDBTransactionSync
IDBVersionChangeEvent
IDBVersionChangeRequest