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
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:
TransactionInactiveErrorDOMException-
Được ném ra nếu transaction của
IDBCursornày không hoạt động. DataErrorDOMException-
Đượ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à
nexthoặcnextunique. - 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à
prevhoặcprevunique.
InvalidStateErrorDOMException-
Được ném ra nếu con trỏ đang được duyệt hoặc đã duyệt quá phần cuối.
InvalidAccessErrorDOMException-
Được ném ra nếu hướng của con trỏ không phải
prevhoặcnext.
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:
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
- Using IndexedDB
- Bắt đầu transaction:
IDBDatabase - Sử 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 - Sử dụng con trỏ:
IDBCursor - Tham chiếu ví dụ: To-do Notifications (xem bản chạy trực tiếp).