IDBCursor: continuePrimaryKey() method
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.
Note: This feature is available in Web Workers.
The continuePrimaryKey()
method of the
IDBCursor
interface advances the cursor to the item whose key
matches the key parameter as well as whose primary key matches the primary key
parameter.
A typical use case, is to resume the iteration where a previous cursor has been closed, without having to compare the keys one by one.
Calling this method more than once before new cursor data has been loaded - for
example, calling continuePrimaryKey()
twice from the same onsuccess handler
- results in an InvalidStateError
being thrown on the second call because
the cursor's got value flag has been unset.
This method is only valid for cursors coming from an index. Using it for cursors coming from an object store will throw an error.
Syntax
continuePrimaryKey(key, primaryKey)
Parameters
key
-
The key to position the cursor at.
primaryKey
-
The primary key to position the cursor at.
Return value
None (undefined
).
Exceptions
This method may raise a DOMException
of one of the following types:
TransactionInactiveError
DOMException
-
Thrown if this
IDBCursor
's transaction is inactive. DataError
DOMException
-
Thrown if the key parameter has any of the following conditions:
- The key is not a valid key.
- The key is less than or equal to this cursor's position and the cursor's direction is
next
ornextunique
. - The key is greater than or equal to this cursor's position and this cursor's direction is
prev
orprevunique
.
InvalidStateError
DOMException
-
Thrown if the cursor is currently being iterated or has iterated past its end.
InvalidAccessError
DOMException
-
Thrown if the cursor's direction is not
prev
ornext
.
Examples
here's how you can resume an iteration of all articles tagged with
"javascript"
since your last visit:
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;
}
// update lastIteratedArticleId
setLastIteratedArticleId(cursor.primaryKey);
// preload 5 articles into the unread list;
unreadList.push(cursor.value);
if (++count < 5) {
cursor.continue();
}
};
Specifications
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbcursor-continueprimarykey① |
Browser compatibility
BCD tables only load in the browser
See also
- Using IndexedDB
- Starting transactions:
IDBDatabase
- Using transactions:
IDBTransaction
- Setting a range of keys:
IDBKeyRange
- Retrieving and making changes to your data:
IDBObjectStore
- Using cursors:
IDBCursor
- Reference example: To-do Notifications (View the example live).