IDBDatabase: метод transaction()
Базовая Широко доступная
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2021 года.
Примечание: Эта функция доступна в Потоках выполнения Web Workers.
Метод transaction интерфейса IDBDatabase сразу возвращает объект транзакции (IDBTransaction), содержащий метод IDBTransaction.objectStore, который можно использовать для доступа к хранилищу объектов.
Синтаксис
transaction(storeNames) transaction(storeNames, mode) transaction(storeNames, mode, options)
Параметры
storeNames-
Имена хранилищ объектов, которые находятся в области действия новой транзакции, объявленные как массив строк. Указывайте только те хранилища объектов, к которым необходимо получить доступ. Если вам нужно получить доступ только к одному хранилищу объектов, можно указать его имя как строку. Следующие строки эквивалентны:
db.transaction(["my-store-name"]); db.transaction("my-store-name");Если необходимо получить доступ ко всем хранилищам объектов в базе данных, можно использовать свойство
IDBDatabase.objectStoreNames:const transaction = db.transaction(db.objectStoreNames);
Передача пустого массива вызовет исключение.
modeНеобязательно-
Типы доступа, которые могут быть выполнены в транзакции. Транзакции открываются в одном из трех режимов:
readonly-
Открыть транзакцию для чтения из хранилища объектов. Это режим по умолчанию.
readwrite-
Открыть транзакцию для чтения и записи из хранилища объектов. Это следует использовать только в случае необходимости записи в базу данных.
readwriteflushНестандартный Экспериментальный-
Принудительно выполнить сброс транзакции на диск перед передачей события
complete. Это может использоваться для сохранения критических данных, которые нельзя вычислить повторно позже.
optionsНеобязательно-
Объект, определяющий дополнительные параметры, включая:
durability-
Одно из трех значений строк ниже:
"strict"-
Агент пользователя может считать, что транзакция успешно завершена только после проверки, что все незавершенные изменения были успешно записаны на постоянное хранилище. Это рекомендуется в тех случаях, когда риск потери данных перевешивает влияние его использования на производительность и энергопотребление (по сравнению с
relaxed). "relaxed"-
Агент пользователя может считать, что транзакция успешно завершена, как только все незавершенные изменения были записаны в операционную систему без последующей проверки. Это обеспечивает лучшую производительность, чем
strict, и рекомендуется для временных данных, таких как кэши или быстро меняющиеся записи. "default"-
Агент пользователя должен использовать свое поведение по умолчанию для хранения ведра. Это поведение по умолчанию для транзакций, если не указано иное.
Возвращаемое значение
Объект IDBTransaction.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если метод
close()ранее был вызван для этого экземпляраIDBDatabase. -
NotFoundErrorDOMException -
Выбрасывается, если хранилище объектов, указанное в параметре 'storeNames', было удалено.
TypeError-
Выбрасывается, если значение для параметра
modeневерно. -
InvalidAccessErrorDOMException -
Выбрасывается, если функция была вызвана с пустым списком имен хранилищ.
Примеры
В этом примере мы открываем соединение с базой данных, а затем используем transaction() для открытия транзакции в базе данных. Для получения полного примера см. наше приложение To-do Notifications (посмотреть пример онлайн).
let db;
// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Database initialized.";
// 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
const transaction = db.transaction(["toDoList"], "readwrite");
// report on the success of opening the transaction
transaction.oncomplete = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Transaction completed: database modification finished.";
};
transaction.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Transaction not opened due to error. Duplicate items not allowed.";
};
// you would then go on to do something to this database
// via an object store
const objectStore = transaction.objectStore("toDoList");
// etc.
Спецификации
Совместимость браузеров
| Десктоп | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
transaction |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
mode_parameter_readwriteflush |
Нет | Нет | 40 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
См. также
- Использование IndexedDB
- Начало транзакций:
IDBDatabase - Использование транзакций:
IDBTransaction - Установка диапазона ключей:
IDBKeyRange - Получение и внесение изменений в данные:
IDBObjectStore - Использование курсоров:
IDBCursor - Пример ссылки: To-do Notifications (Посмотреть пример онлайн).
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/transaction