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".
};
Спецификации
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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