Spec-Zone.ru › Web APIs

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.

Исключения

InvalidStateError DOMException

Выбрасывается, если метод close() ранее был вызван для этого экземпляра IDBDatabase.

NotFoundError DOMException

Выбрасывается, если хранилище объектов, указанное в параметре 'storeNames', было удалено.

TypeError

Выбрасывается, если значение для параметра mode неверно.

InvalidAccessError DOMException

Выбрасывается, если функция была вызвана с пустым списком имен хранилищ.

Примеры

В этом примере мы открываем соединение с базой данных, а затем используем 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.

Спецификации

Спецификация
Indexed Database API 3.0
# ref-for-dom-idbdatabase-transaction③

Совместимость браузеров

Десктоп Мобильные
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API