IDBCursor: phương thức continuePrimaryKey()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

Note: This feature is available in Web Workers.

Phương thức continuePrimaryKey() của giao diện IDBCursor đưa con trỏ đến mục có khóa khớp với tham số khóa, đồng thời khóa chính khớp với tham số khóa chính.

Một trường hợp sử dụng điển hình là tiếp tục vòng lặp tại vị trí mà một con trỏ trước đó đã bị đóng, mà không cần so sánh từng khóa một.

Việc gọi phương thức này nhiều hơn một lần trước khi dữ liệu con trỏ mới được tải - ví dụ gọi continuePrimaryKey() hai lần từ cùng một trình xử lý onsuccess - sẽ dẫn đến ngoại lệ InvalidStateError ở lần gọi thứ hai vì cờ got value của con trỏ đã bị bỏ đặt.

Phương thức này chỉ hợp lệ cho các con trỏ lấy từ một index. Nếu dùng cho con trỏ lấy từ object store, nó sẽ ném lỗi.

Cú pháp

js
continuePrimaryKey(key, primaryKey)

Tham số

key

Khóa để đặt vị trí con trỏ.

primaryKey

Khóa chính để đặt vị trí con trỏ.

Giá trị trả về

Không có (undefined).

Ngoại lệ

Phương thức này có thể ném ra một DOMException thuộc một trong các kiểu sau:

TransactionInactiveError DOMException

Được ném ra nếu transaction của IDBCursor này không hoạt động.

DataError DOMException

Được ném ra nếu tham số khóa có bất kỳ điều kiện nào sau đây:

  • Khóa không phải là một khóa hợp lệ.
  • Khóa nhỏ hơn hoặc bằng vị trí hiện tại của con trỏ, và hướng của con trỏ là next hoặc nextunique.
  • Khóa lớn hơn hoặc bằng vị trí hiện tại của con trỏ, và hướng của con trỏ là prev hoặc prevunique.
InvalidStateError DOMException

Được ném ra nếu con trỏ đang được duyệt hoặc đã duyệt quá phần cuối.

InvalidAccessError DOMException

Được ném ra nếu hướng của con trỏ không phải prev hoặc next.

Ví dụ

Đây là cách bạn có thể tiếp tục duyệt tất cả bài viết được gắn thẻ "javascript" kể từ lần ghé thăm gần nhất:

js
let request = articleStore.index("tag").openCursor();
let count = 0;
let unreadList = [];
request.onsuccess = (event) => {
  let cursor = event.target.result;
  if (!cursor) {
    return;
  }
  let lastPrimaryKey = getLastIteratedArticleId();
  if (lastPrimaryKey > cursor.primaryKey) {
    cursor.continuePrimaryKey("javascript", lastPrimaryKey);
    return;
  }
  // cập nhật lastIteratedArticleId
  setLastIteratedArticleId(cursor.primaryKey);
  // nạp trước 5 bài viết vào danh sách chưa đọc;
  unreadList.push(cursor.value);
  if (++count < 5) {
    cursor.continue();
  }
};

Thông số kỹ thuật

Specification
Indexed Database API 3.0
# ref-for-dom-idbcursor-continueprimarykey①

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

Xem thêm