IDBTransaction: thuộc tính mode

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 mode của giao diện IDBTransaction trả về chế độ hiện tại để truy cập dữ liệu trong các object store nằm trong phạm vi transaction, tức là chế độ chỉ đọc hay có ghi vào object store. Giá trị mặc định là readonly.

Giá trị

Một chuỗi xác định chế độ để cô lập truy cập tới dữ liệu trong các object store hiện tại. Các giá trị sau có sẵn:

readonly

Cho phép đọc dữ liệu nhưng không cho thay đổi.

readwrite

Cho phép đọc và ghi dữ liệu trong các kho dữ liệu hiện có.

versionchange

Cho phép thực hiện mọi thao tác, kể cả những thao tác xóa và tạo object store và index. Chế độ này dùng để cập nhật số phiên bản của transaction nếu phát hiện cần thiết khi gọi IDBFactory.open(). Transaction ở chế độ này không thể chạy đồng thời với transaction khác. Transaction ở chế độ này được gọi là upgrade transaction.

Ví dụ

Trong đoạn mã sau, chúng ta mở một transaction đọc/ghi trên cơ sở dữ liệu và thêm dữ liệu vào object store. Lưu ý các hàm được gắn vào event handler của transaction để báo kết quả mở transaction trong trường hợp thành công hoặc thất bại. Cuối cùng, chúng ta ghi lại chế độ của transaction hiện tại bằng mode. Để xem ví dụ đầy đủ, hãy xem ứng dụng To-do Notifications app của chúng tôi (xem ví dụ trực tiếp).

js
const note = document.getElementById("notifications");

// một thể hiện của object db để lưu dữ liệu IDB vào
let db;

// Hãy mở cơ sở dữ liệu của chúng ta
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Database initialized.";

  // lưu kết quả mở cơ sở dữ liệu vào biến db.
  // Biến này sẽ được dùng rất nhiều về sau
  db = DBOpenRequest.result;

  // Chạy hàm addData() để thêm dữ liệu vào cơ sở dữ liệu
  addData();
};

function addData() {
  // Tạo một object mới để chèn vào IDB
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // mở transaction đọc/ghi, sẵn sàng để thêm dữ liệu
  const transaction = db.transaction(["toDoList"], "readwrite");

  // báo cáo về kết quả mở 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.";
  };

  // tạo object store trên transaction
  const objectStore = transaction.objectStore("toDoList");

  // thêm object newItem vào object store
  const objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = (event) => {
    // báo cáo thành công của request (điều này không có nghĩa là mục
    // đã được lưu thành công trong DB - để làm vậy bạn cần transaction.onsuccess)
    note.appendChild(document.createElement("li")).textContent =
      "Request successful.";
  };

  // Trả về chế độ mà transaction này được mở với (trong trường hợp này phải là "readwrite")
  transaction.mode;
}

Thông số kỹ thuật

Specification
Indexed Database API 3.0
# ref-for-dom-idbtransaction-mode①

Tương thích trình duyệt

Xem thêm