Spec-Zone.ru › Web APIs

IDBRequest: свойство transaction

Базовая Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2021 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Потоках Web Workers.

Чтение только свойство transaction интерфейса IDBRequest возвращает транзакцию для запроса, то есть транзакцию, в которой выполняется запрос.

Это свойство может быть null для запросов, не выполненных в рамках транзакций, таких как запросы, возвращаемые из IDBFactory.open — в этом случае вы просто подключаетесь к базе данных, поэтому транзакции для возврата нет. Если при открытии базы данных требуется обновление версии, то во время обработчика события upgradeneeded свойство transaction будет IDBTransaction с mode, равным "versionchange", и может использоваться для доступа к существующим хранилищам объектов и индексам или для прерывания обновления. После обновления свойство transaction снова будет null.

Значение

Объект IDBTransaction.

Примеры

В следующем примере запрашивается заданное название записи, onsuccess извлекается связанная запись из IDBObjectStore (доступная как objectStoreTitleRequest.result), обновляется одно свойство записи, а затем обновлённая запись возвращается в хранилище объектов в другом запросе. Источник запросов записывается в консоль разработчика — оба происходят из одной транзакции. Для полного рабочего примера см. наше приложение To-do Notifications (Посмотреть пример вживую).

const title = "Walk dog";

// Open up a transaction as usual
const objectStore = db
  .transaction(["toDoList"], "readwrite")
  .objectStore("toDoList");

// Get the to-do list object that has this title as its title
const objectStoreTitleRequest = objectStore.get(title);

objectStoreTitleRequest.onsuccess = () => {
  // Grab the data object returned as the result
  const data = objectStoreTitleRequest.result;

  // Update the notified value in the object to "yes"
  data.notified = "yes";

  // Create another request that inserts the item back
  // into the database
  const updateTitleRequest = objectStore.put(data);

  // Log the transaction that originated this request
  console.log(
    `The transaction that originated this request is ${updateTitleRequest.transaction}`,
  );

  // When this new request succeeds, run the displayData()
  // function again to update the display
  updateTitleRequest.onsuccess = () => {
    displayData();
  };
};

Этот пример демонстрирует, как свойство transaction может быть использовано во время обновления версии для доступа к существующим хранилищам объектов:

const openRequest = indexedDB.open("db", 2);
console.log(openRequest.transaction); // Will log "null".

openRequest.onupgradeneeded = (event) => {
  console.log(openRequest.transaction.mode); // Will log "versionchange".
  const db = openRequest.result;
  if (event.oldVersion < 1) {
    // New database, create "books" object store.
    db.createObjectStore("books");
  }
  if (event.oldVersion < 2) {
    // Upgrading from v1 database: add index on "title" to "books" store.
    const bookStore = openRequest.transaction.objectStore("books");
    bookStore.createIndex("by_title", "title");
  }
};

openRequest.onsuccess = () => {
  console.log(openRequest.transaction); // Will log "null".
};

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

Спецификация
Indexed Database API 3.0
# ref-for-dom-idbrequest-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

См. также

  • Использование 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/IDBRequest/transaction

Spec-Zone.ru

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