IDBRequest: thuộc tính transaction
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is available in Web Workers.
Thuộc tính chỉ đọc transaction của giao diện IDBRequest trả về transaction của request, tức là transaction mà request đang được thực hiện bên trong.
Thuộc tính này có thể là null đối với các request không được tạo bên trong transaction, chẳng hạn các request được trả về từ IDBFactory.open. Trong trường hợp này, bạn chỉ đang kết nối tới cơ sở dữ liệu nên không có transaction nào để trả về. Nếu cần nâng cấp phiên bản khi mở cơ sở dữ liệu thì trong trình xử lý sự kiện upgradeneeded, thuộc tính transaction sẽ là một IDBTransaction có mode bằng "versionchange" và có thể được dùng để truy cập các object store và index hiện có, hoặc hủy nâng cấp. Sau khi nâng cấp xong, thuộc tính transaction sẽ আবার trở lại null.
Giá trị
Một IDBTransaction.
Ví dụ
Ví dụ sau yêu cầu một tiêu đề bản ghi nhất định, onsuccess lấy bản ghi liên quan từ IDBObjectStore (có sẵn dưới dạng objectStoreTitleRequest.result), cập nhật một thuộc tính của bản ghi, rồi đưa bản ghi đã cập nhật trở lại object store trong một request khác. Nguồn của các request được ghi ra console của nhà phát triển, và cả hai đều xuất phát từ cùng một transaction. Để xem một ví dụ hoạt động đầy đủ, hãy xem ứng dụng To-do Notifications của chúng tôi (Xem ví dụ trực tiếp).
const title = "Walk dog";
// Mở transaction như bình thường
const objectStore = db
.transaction(["toDoList"], "readwrite")
.objectStore("toDoList");
// Lấy object trong to-do list có tiêu đề này
const objectStoreTitleRequest = objectStore.get(title);
objectStoreTitleRequest.onsuccess = () => {
// Lấy object dữ liệu được trả về như kết quả
const data = objectStoreTitleRequest.result;
// Cập nhật giá trị notified trong object thành "yes"
data.notified = "yes";
// Tạo một request khác để chèn mục trở lại
// cơ sở dữ liệu
const updateTitleRequest = objectStore.put(data);
// Ghi lại transaction đã tạo ra request này
console.log(
`Transaction đã tạo ra request này là ${updateTitleRequest.transaction}`,
);
// Khi request mới này thành công, chạy lại hàm displayData()
// để cập nhật hiển thị
updateTitleRequest.onsuccess = () => {
displayData();
};
};
Ví dụ này cho thấy thuộc tính transaction có thể được dùng trong quá trình nâng cấp phiên bản để truy cập các object store hiện có:
const openRequest = indexedDB.open("db", 2);
console.log(openRequest.transaction); // Sẽ ghi "null".
openRequest.onupgradeneeded = (event) => {
console.log(openRequest.transaction.mode); // Sẽ ghi "versionchange".
const db = openRequest.result;
if (event.oldVersion < 1) {
// Cơ sở dữ liệu mới, tạo object store "books".
db.createObjectStore("books");
}
if (event.oldVersion < 2) {
// Nâng cấp từ cơ sở dữ liệu v1: thêm index trên "title" vào store "books".
const bookStore = openRequest.transaction.objectStore("books");
bookStore.createIndex("by_title", "title");
}
};
openRequest.onsuccess = () => {
console.log(openRequest.transaction); // Sẽ ghi "null".
};
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbrequest-transaction①> |
Tương thích trình duyệt
Xem thêm
- Dùng IndexedDB
- Bắt đầu transaction:
IDBDatabase - Dùng transaction:
IDBTransaction - Thiết lập một phạm vi khóa:
IDBKeyRange - Truy xuất và thay đổi dữ liệu của bạn:
IDBObjectStore - Dùng cursor:
IDBCursor - Ví dụ tham khảo: To-do Notifications (Xem ví dụ trực tiếp).